2014-12-02 127 views
0

我会转换的NSString为unsigned char []

NSString *myString = @"0x10 0x1c 0x37 0x00"; //Aquired reading text file using NSString methods.. 

unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 }; 

我的目标是aquiring他们,然后使用此代码将其交换:

unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 }; 
    int data = *((int *) convertedfromString); 
    NSLog(@"log = %08x", data); 

输出应该是:

log = 00371c10 

任何帮助?

编辑

无论从一月巴蒂斯特尤尼斯和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); 

真行! 但我能接受两个答案吗?

回答

1

您可以在空格处剪切原始字符串并使用此处给出的解决方案Objective-C parse hex string to integer。您还可以使用scanUpToString:intoString解析空间字符。

+0

like * myString = @“101c3700”然后呢? :) – Mike97 2014-12-02 18:39:46

+0

没有使用'scannerWithString','scanUpToString:@“”intoString:aNumberString'构造扫描器,然后用另一个扫描器和'scanNexInt:@ myInt'将'aNumberString'变量转换为int。 – 2014-12-02 18:48:20

+0

感谢您回答我。我找到了从你的建议中做出我需要的方法,但也从Sven的回答中... – Mike97 2014-12-02 19:22:34

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; 
} 

当然这个样品丢失的错误处理(单值可能不适合成无符号的字符或可以有多于四个)。

但是,这只解决了你的一半问题。另一个问题是将其转换为int。您通过将unsigned char指针转换为一个int指针来完成此操作。这不是可移植的,在C中也不合法。为了总是得到你想要的结果,你应该使用位移来组装你的int。因此,在你的循环内,你可以做

result = result | (value << i); 
i += 8; 

而不是将值放入unsigned char数组中。对于这resulti都应该被初始化为零。

+0

好吧,我用更简单的方法找到了方法...我应该将新代码归功于谁? – Mike97 2014-12-02 19:23:07