iOS 16进制 转byte数组问题

最近用到了socket, 在发送数据的时候遇到了问题 所以拿出来分享下。

由于服务器需要 8位数 byte数组   所以方法是这样

- (void)sendMessageForservers:(NSString *)message {

NSString *hexString = message; //16进制字符串

int j=0;

Byte bytes[8];

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

{

int int_ch;  /// 两位16进制数转化后的10进制数

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

int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97

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

int_ch2 = hex_char2-87; //// a 的Ascll - 97

int_ch = int_ch1+int_ch2;

NSLog(@"int_ch=%d",int_ch);

bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

j++;

}

NSData *newData = [[NSData alloc] initWithBytes:bytes length:8];

[sendTcpSocket writeData:newData withTimeout:-1 tag:0];

}

在我做demo的时候  这样的方法 并没有出问题 但是在项目的时候   由于多线程 导致i老是越界 上了锁也没有用    但是单调就是好的  所以也不知道哪出的问题     于是就改成下面了 

- (void)sendMessageForservers:(NSString *)message {

Lock();

NSString *hexString = message; //16进制字符串

int j=0;

Byte bytes[8];

for(int i=0;i<[hexString length]/2;i++)

{

int int_ch;  /// 两位16进制数转化后的10进制数

unichar hex_char1 = [hexString characterAtIndex:i*2]; 

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

int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97

unichar hex_char2 = [hexString characterAtIndex:i*2 + 1]; 

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

int_ch2 = hex_char2-87; //// a 的Ascll - 97

NSLog(@"i----%d---%d",i,hex_char2);

int_ch = int_ch1+int_ch2;

bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

j++;

}

Unlock();

NSData *newData = [[NSData alloc] initWithBytes:bytes length:8];

[self.sendTcpSocket writeData:newData withTimeout:-1 tag:0];

}     

lock 是宏定义的信号量锁  貌似lock 并没有起到作用  如果在for循环里 还是对i操作的话 所以就去掉i++了  直接length/2了        还望大神指教

你可能感兴趣的:(iOS 16进制 转byte数组问题)