日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Objective-C 中Socket常用转换机制(NSData,NSString,int,Uint8,Uint16,Uint32,byte[])

發布時間:2025/3/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C 中Socket常用转换机制(NSData,NSString,int,Uint8,Uint16,Uint32,byte[]) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近項目中要用到socket通訊,由于涉及到組包問題,所以需要數據類型之間的來回轉換,現在分享出來

如果想要請教Socket的問題請留言,我會隨時回答的

1. int類型轉16進制hexstring

[objc] view plaincopy
  • //int?轉16進制??
  • -?(NSString?*)hexFromInt:(NSInteger)val?{??
  • ????return?[NSString?stringWithFormat:@"%X",?val];??
  • }??
  • ?

    2.16進制轉換為NSData

    [objc] view plaincopy
  • +?(NSData?*)dataFromHexString:(NSString?*)hexString??
  • {??
  • ????NSAssert((hexString.length?>?0)?&&?(hexString.length?%?2?==?0),?@"hexString.length?mod?2?!=?0");??
  • ????NSMutableData?*data?=?[[NSMutableData?alloc]?init];??
  • ????for?(NSUInteger?i=0;?i<hexString.length;?i+=2)?{??
  • ????????NSRange?tempRange?=?NSMakeRange(i,?2);??
  • ????????NSString?*tempStr?=?[hexString?substringWithRange:tempRange];??
  • ????????NSScanner?*scanner?=?[NSScanner?scannerWithString:tempStr];??
  • ????????unsigned?int?tempIntValue;??
  • ????????[scanner?scanHexInt:&tempIntValue];??
  • ????????[data?appendBytes:&tempIntValue?length:1];??
  • ????}??
  • ????return?data;??
  • }??


  • 3.NSData轉16進制

    [objc] view plaincopy
  • +?(NSString?*)hexStringFromData:(NSData?*)data??
  • {??
  • ????NSAssert(data.length?>?0,?@"data.length?<=?0");??
  • ????NSMutableString?*hexString?=?[[NSMutableString?alloc]?init];??
  • ????const?Byte?*bytes?=?data.bytes;??
  • ????for?(NSUInteger?i=0;?i<data.length;?i++)?{??
  • ????????Byte?value?=?bytes[i];??
  • ????????Byte?high?=?(value?&?0xf0)?>>?4;??
  • ????????Byte?low?=?value?&?0xf;??
  • ????????[hexString?appendFormat:@"%x%x",?high,?low];??
  • ????}//for??
  • ????return?hexString;??
  • }??

  • 4.NSString轉int類型

    [objc] view plaincopy
  • int?a?=?[aStrinng??intValue];??

  • 5.uint8轉NSData(占兩位)

    [objc] view plaincopy
  • +?(NSData?*)byteFromUInt8:(uint8_t)val??
  • {??
  • ????NSMutableData?*valData?=?[[NSMutableData?alloc]?init];??
  • ??????
  • ????unsigned?char?valChar[1];??
  • ????valChar[0]?=?0xff?&?val;??
  • ????[valData?appendBytes:valChar?length:1];??
  • ??????
  • ????return?[self?dataWithReverse:valData];??
  • }??

  • 6.uint16 轉NSData(占四位)

    [objc] view plaincopy
  • +?(NSData?*)bytesFromUInt16:(uint16_t)val??
  • {??
  • ????NSMutableData?*valData?=?[[NSMutableData?alloc]?init];??
  • ??????
  • ????unsigned?char?valChar[2];??
  • ????valChar[0]?=?0xff?&?val;??
  • ????valChar[1]?=?(0xff00?&?val)?>>?8;??
  • ????[valData?appendBytes:valChar?length:2];??
  • ??????
  • ????return?[self?dataWithReverse:valData];??
  • }??

  • 7.Uint32 轉NSData(占八位)

    [objc] view plaincopy
  • +?(NSData?*)bytesFromUInt32:(uint32_t)val??
  • {??
  • ????NSMutableData?*valData?=?[[NSMutableData?alloc]?init];??
  • ??????
  • ????unsigned?char?valChar[4];??
  • ????valChar[0]?=?0xff?&?val;??
  • ????valChar[1]?=?(0xff00?&?val)?>>?8;??
  • ????valChar[2]?=?(0xff0000?&?val)?>>?16;??
  • ????valChar[3]?=?(0xff000000?&?val)?>>?24;??
  • ????[valData?appendBytes:valChar?length:4];??
  • ??????
  • ????return?[self?dataWithReverse:valData];??
  • }??
  • ?

    8.NSString 轉NSData

    [objc] view plaincopy
  • NSData?*data?=?[aString??dataUsingEncoding:NSUTF8StringEncoding];//?通過utf-8轉為data??

  • 9.NSData轉Uint8

    [objc] view plaincopy
  • +?(uint8_t)uint8FromBytes:(NSData?*)fData??
  • {??
  • ????NSAssert(fData.length?==?1,?@"uint8FromBytes:?(data?length?!=?1)");??
  • ????NSData?*data?=?fData;??
  • ????uint8_t?val?=?0;??
  • ????[data?getBytes:&val?length:1];??
  • ????return?val;??
  • }??

  • 10.NSData轉Uint16

    [objc] view plaincopy
  • +?(uint16_t)uint16FromBytes:(NSData?*)fData??
  • {??
  • ????NSAssert(fData.length?==?2,?@"uint16FromBytes:?(data?length?!=?2)");??
  • ????NSData?*data?=?[self?dataWithReverse:fData];;??
  • ????uint16_t?val0?=?0;??
  • ????uint16_t?val1?=?0;??
  • ????[data?getBytes:&val0?range:NSMakeRange(0,?1)];??
  • ????[data?getBytes:&val1?range:NSMakeRange(1,?1)];??
  • ??????
  • ????uint16_t?dstVal?=?(val0?&?0xff)?+?((val1?<<?8)?&?0xff00);??
  • ????return?dstVal;??
  • }??

  • 11.NSData轉Uint32

    [objc] view plaincopy
  • +?(uint32_t)uint32FromBytes:(NSData?*)fData??
  • {??
  • ????NSAssert(fData.length?==?4,?@"uint32FromBytes:?(data?length?!=?4)");??
  • ????NSData?*data?=?[self?dataWithReverse:fData];??
  • ??????
  • ????uint32_t?val0?=?0;??
  • ????uint32_t?val1?=?0;??
  • ????uint32_t?val2?=?0;??
  • ????uint32_t?val3?=?0;??
  • ????[data?getBytes:&val0?range:NSMakeRange(0,?1)];??
  • ????[data?getBytes:&val1?range:NSMakeRange(1,?1)];??
  • ????[data?getBytes:&val2?range:NSMakeRange(2,?1)];??
  • ????[data?getBytes:&val3?range:NSMakeRange(3,?1)];??
  • ??????
  • ????uint32_t?dstVal?=?(val0?&?0xff)?+?((val1?<<?8)?&?0xff00)?+?((val2?<<?16)?&?0xff0000)?+?((val3?<<?24)?&?0xff000000);??
  • ????return?dstVal;??
  • }??

  • 12.NSData轉Byte

    [objc] view plaincopy
  • uint8_t?byteArray[[data?length]];??
  • ???
  • ?[data?getBytes:&byteArray?length:[data?length]];??
  • ???
  • ??
  • ?for?(int?i?=?0;?i?<?[data?length]?;?i++?)?{??
  • ?????Byte?byte?=?byteArray[i];??
  • ?????NSLog(@"--byte%x",byte);??
  • ?}??
  • ?

    13.NSData的拼接

    [objc] view plaincopy
  • [data1?appendData:data2];??
  • ?

    14.NSData轉int (用CFSwapInt32BigToHost)

    ?

    [objc] view plaincopy
  • NSData?*data4?=?[completeData?subdataWithRange:NSMakeRange(0,?4)];??
  • int?value?=?CFSwapInt32BigToHost(*(int*)([data4?bytes]));??
  • ?

    以上可能會用到的反轉字節序列代碼

    [objc] view plaincopy
  • +?(NSData?*)dataWithReverse:(NSData?*)srcData??
  • {??
  • ????//????NSMutableData?*dstData?=?[[NSMutableData?alloc]?init];??
  • ????//????for?(NSUInteger?i=0;?i<srcData.length;?i++)?{??
  • ????//????????[dstData?appendData:[srcData?subdataWithRange:NSMakeRange(srcData.length-1-i,?1)]];??
  • ????//????}//for??
  • ??????
  • ????NSUInteger?byteCount?=?srcData.length;??
  • ????NSMutableData?*dstData?=?[[NSMutableData?alloc]?initWithData:srcData];??
  • ????NSUInteger?halfLength?=?byteCount?/?2;??
  • ????for?(NSUInteger?i=0;?i<halfLength;?i++)?{??
  • ????????NSRange?begin?=?NSMakeRange(i,?1);??
  • ????????NSRange?end?=?NSMakeRange(byteCount?-?i?-?1,?1);??
  • ????????NSData?*beginData?=?[srcData?subdataWithRange:begin];??
  • ????????NSData?*endData?=?[srcData?subdataWithRange:end];??
  • ????????[dstData?replaceBytesInRange:begin?withBytes:endData.bytes];??
  • ????????[dstData?replaceBytesInRange:end?withBytes:beginData.bytes];??
  • ????}//for??
  • ??????
  • ????return?dstData;??
  • }?
  • 總結

    以上是生活随笔為你收集整理的Objective-C 中Socket常用转换机制(NSData,NSString,int,Uint8,Uint16,Uint32,byte[])的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。