我会转换
NSString *myString = @"0x10 0x1c 0x37 0x00"; //Aquired reading text file using NSString methods..
到
unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 };
我的目标是获取它们,然后使用以下代码进行交换:
unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 };
int data = *((int *) convertedfromString);
NSLog(@"log = %08x", data);
输出应为:
log = 00371c10
任何帮助?
修改
JanBaptisteYounès和Sven都找到了理解我的问题并用这段代码解决的方法:
NSString *myString = [[@"0x10 0x1c 0x37 0x00" stringByReplacingOccurrencesOfString:@"0x" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:myString];
[scanner scanHexInt:&result];
int reverse = NSSwapInt(result);
NSLog(@"scanner: %8u", result);
NSLog(@"bytes:%08x", result);
NSLog(@"reverse:%08x (that is what i need!)", reverse);
真的没问题! 但我可以接受两个答案吗?
答案 0 :(得分:2)
这不仅仅是一个简单的转换,您需要实际解析字符串中的值。您可以使用NSScanner执行此操作。
NSScanner *scanner = [NSScanner scannerWithString: @"0x10 0x1c 0x37 0x00"];
unsigned char convertedfrommyString[4];
unsigned index = 0;
while (![scanner isAtEnd]) {
unsigned value = 0;
if (![scanner scanHexInt: &value]) {
// invalid value
break;
}
convertedfrommyString[index++] = value;
}
当然这个示例缺少错误处理(单个值无法放入unsigned char或者可能超过四个)。
但这只解决了你问题的一半。另一个问题是将其转换为int。您通过将unsigned char指针转换为int指针来完成此操作。这不是可移植的,在C中也不合法。要总是得到你想要的结果,你应该使用位移来组装你的int。所以在你的循环中你可以做到
result = result | (value << i);
i += 8;
而不是将值放在unsigned char数组中。对于此result
和i
,都应该初始化为零。
答案 1 :(得分:1)
您可以在空格处剪切原始字符串,并使用此处给出的解决方案Objective-C parse hex string to integer。您还可以使用scanUpToString:intoString
来解析空间字符。