2014-12-02 124 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