NSData之間資料型別轉化

Eric君發表於2018-01-03

在做TCP資料傳輸中,協議往往需要傳輸的是Byte陣列,而在iOS中我們常常都是傳送的NSData型別,這時我們就需要轉化。具體操作如下:

  • Byte 轉化為 NSData
Byte byte[] = {0x55, 0x07, 0x02, 0x01, 0x1A, 0x01, 0xAA};
NSData *data = [NSData dataWithBytes:byte lenght:7];
複製程式碼
  • NSData 轉化為 Byte
NSString *testString = @"1234567890";  
NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];  
Byte *testByte = (Byte *)[testData bytes];
複製程式碼
  • int 轉化為 NSData
int i = 1;
NSData *data = [NSData dataWithBytes:&i length: sizeof(i)];
複製程式碼
  • NSData 轉化為 int
int k;
[data getBytes: &k length: sizeof(k)];
複製程式碼
  • NSData 轉化為 NSString
NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];
複製程式碼
  • NSString 轉化為 NSData
NSString *aString = @"1234";
NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];
複製程式碼
  • UIImage 轉化為 NSData
NSData *imageData = UIImagePNGRepresentation(image);
複製程式碼
  • NSData 轉化為 UIImage
NSData *imageData = [NSData dataWithContentsOfFile: filePath];  
UIImage *image = [UIImage imageWithData: imageData];
複製程式碼
注意

假如你們公司後臺是java開發的,而之間又要進行資料傳輸,那麼****可能 ****就會涉及大小端的資料問題。因為java預設是大端,iOS採用的是小端模式,所以需要轉化。具體操作如下:

  1. 先進行大小端判斷
int checkCPUendian() {//返回1,為小端;反之,為大端;
    union
    {
        unsigned int  a;
        unsigned char b;
    }c;
    c.a = 1;
    return 1 == c.b;
}
複製程式碼
  1. 再將小端轉化為大端, 利用C語言函式ntohl()進行轉換
int newSize = size;
    if (checkCPUendian() == 1) {
        newSize = ntohl(size);//小端轉大端
    }
複製程式碼

相關文章