Objective-C Byte数组和十六进制互转操作
时间: 2024-01-14 22:04:28 浏览: 252
在Objective-C中,可以通过NSData和NSString类提供的方法进行Byte数组和十六进制字符串的互转操作。
1. Byte数组转十六进制字符串:
```
// 定义一个Byte数组
Byte bytes[] = {0x12, 0x34, 0x56, 0x78};
// 将Byte数组转为NSData对象
NSData *data = [[NSData alloc] initWithBytes:bytes length:4];
// 使用NSData对象提供的方法将Byte数组转为十六进制字符串
NSString *hexString = [data description];
hexString = [hexString stringByReplacingOccurrencesOfString:@" " withString:@""];
hexString = [hexString stringByReplacingOccurrencesOfString:@"<" withString:@""];
hexString = [hexString stringByReplacingOccurrencesOfString:@">" withString:@""];
NSLog(@"hexString = %@", hexString); // 输出结果:hexString = 12345678
```
2. 十六进制字符串转Byte数组:
```
// 定义一个十六进制字符串
NSString *hexString = @"12345678";
// 将十六进制字符串转为NSData对象
NSMutableData *data = [[NSMutableData alloc] init];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
for (int i=0; i<[hexString length]/2; i++) {
byte_chars[0] = [hexString characterAtIndex:i*2];
byte_chars[1] = [hexString characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[data appendBytes:&whole_byte length:1];
}
// 将NSData对象转为Byte数组
Byte *bytes = (Byte *)[data bytes];
for (int i=0; i<[data length]; i++) {
NSLog(@"bytes[%d] = %x", i, bytes[i]); // 输出结果:bytes[0] = 12、bytes[1] = 34、bytes[2] = 56、bytes[3] = 78
}
```
需要注意的是,使用NSData的description方法将Byte数组转为十六进制字符串时,输出结果的格式为“<12 34 56 78>”,需要使用NSString的stringByReplacingOccurrencesOfString方法去掉空格和尖括号。
阅读全文