2013-04-01 312 views
1

我在問這個問題,主要是因爲我已經通過這個網站搜索了可能的解決方案,但都沒有按照我希望的方式進行。將十六進制字符串轉換爲無符號字符[]

我想執行將此十六進制字符串轉換爲無符號字符[]。

NSString *text = @"0043600001";unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01}

我需要的十六進制表示0X ##因爲我送接受只hexadecimal format消息的主機。我是否正確地說,我也需要NSScanner來執行這些步驟來分隔2個字符?真的迷失了我對我需要做的事情的困惑。

這是連接和發送十六進制消息到主機的步驟:

unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01} 
NSData *data = [NSData dataWithBytes:dataSmall length:sizeof(dataSmall)]; 

PS,我不知道該NSData的一部分,但它似乎當我使用NSData的線送工作十六進制信息發送給主機。所以我就這樣離開了。目前,dataSmall[]是硬編碼,我想知道如何動態處理它。希望這裏有所幫助。

編輯1 啊,我錯過了一個重要的信息。十六進制數據本身是一個ISO8583消息。

+0

你能否解釋一下其中的十六進制字符串是從哪裏來的?看起來很奇怪,你會有一堆十六進制數據作爲字符串。 – rmaddy

+0

起初我對此有點困惑,所以我很抱歉,如果我沒有給你你正在尋找的答案。目前,它將來自「TextField」。但我還沒有做些什麼,比如將ASCII字符串轉換爲十六進制數據。是的,將十六進制字符串轉換爲十六進制數據會很奇怪。 –

+0

如果你想將文本轉換爲可以發送給服務器的NSData,那麼只需像這樣獲取NSData:NSData * textData = [someTextField.text dataUsingEncoding:NSUTF8StringEncoding];'。而已。您現在已經有了以UTF-8編碼的文本字節,並且可以發送到服務器。服務器現在可以使用該數據重新創建UTF-8字符串。沒有必要進行所有這種十六進制轉換。 – rmaddy

回答

0
NSScanner *scan = [[NSScanner alloc] initWithString:@"1F61E"]; 
unsigned int val; 
[scan scanHexInt:&val]; 
char cc[4]; 
cc[3] = (val >> 0) & 0xFF; 
cc[2] = (val >> 8) & 0xFF; 
cc[1] = (val >> 16) & 0xFF; 
cc[0] = (val >> 24) & 0xFF; 
NSString *s = [[NSString alloc] 
       initWithBytes:cc 
       length:4 
       encoding:NSUTF32StringEncoding]; 
NSLog(@"[%@]", s); 
+0

感謝您的示例代碼,將對其進行測試並回復此評論。但我可以問,這個'1F61E'是什麼?和那些0,8,16,24的val比較。他們想要做什麼? –

+0

1f61E是十六進制值,(0,8,16,24)是二進制移位,你可能聽說過二進制移位。 –

+0

不,我沒有。謝謝,我會閱讀有關它。 –

相關問題