美文网首页
【移简书】Data包长度限制

【移简书】Data包长度限制

作者: 小粑粑铖 | 来源:发表于2017-07-24 16:22 被阅读52次

很多朋友在写socket或者MQTT的时候都会存在一个比较蛋疼菊紧的问题.

那就是发送data包的数据转换问题,网上可以查到很多数据类型转换的文章,如nsstring→nsdata,byte→nsdata,uiimage→nsdata等等.但是把nsinteger转成data的文章却很少,也很不实用.

下面我给大家分享一下如何把16进制的nsstring转成nsdata.

上干货:

- (NSData*)dataFormHexString:(NSString*)hexString{   

 hexString=[[stringuppercaseString] stringByReplacingOccurrencesOfString:@" "withString:@""];

if(!(hexString && [hexString length] >0&& [hexString length]%2==0)) {

return nil;   

 }    

Byte tempbyt[1]={0};    

NSMutableData* bytes=[NSMutableData data];

for(inti=0;i<[hexString length];i++)    {

 unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)

int int_ch1;

if(hex_char1 >='0'&& hex_char1 <='9')           

   int_ch1 = (hex_char1-48)*16;//// 0 的Ascll - 48

else if(hex_char1 >='A'&& hex_char1 <='F')     

    int_ch1 = (hex_char1-55)*16;//// A 的Ascll - 65

else 

return nil;       

 i++;       

 unichar hex_char2 = [hexString characterAtIndex:i];///两位16进制数中的第二位(低位)

int int_ch2;

if(hex_char2 >='0'&& hex_char2 <='9')     

       int_ch2 = (hex_char2-48);//// 0 的Ascll - 48

else if(hex_char2 >='A'&& hex_char2 <='F')     

       int_ch2 = hex_char2-55;//// A 的Ascll - 65

else

return nil;       

 tempbyt[0] = int_ch1+int_ch2;///将转化后的数放入Byte数组里

[bytes appendBytes:tempbyt length:1];   

 }

return bytes;

}

相关文章

网友评论

      本文标题:【移简书】Data包长度限制

      本文链接:https://www.haomeiwen.com/subject/fnmbkxtx.html