我知道這似乎是一個愚蠢的問題,但我真的在這裏遇到麻煩。麻煩轉換十二進制到十六進制(詮釋爲字符)
我正在一個項目中,我有一些我不能修改的功能。也就是說,我在Obj裏面有一些C函數(不是我的專長)。我可以修改的C代碼。
所以這裏是...解釋一下我有什麼。
我收到一個NSData,如「\xce\x2d\x1e\x08\x08\xff\x7f
」。我必須把每個\十六進制代碼在字符數組,像這樣:
cArray[1]=ce;
cArray[2]=2d;
cArray[3]=1e;
cArray[4]=08;
等等,等等......當然不是這樣,但只是讓你明白。我最初的舉動是將NSData與subdataWithRange分開:並用所有「subdata」填充一個數組。所以下一步可能是將該數組的每個位置傳遞給一個char數組,這就是我卡住的地方。
我使用類似(不要有我的代碼現在)
for(int i=0 ; i<=64 ; i++) {
[[arrayOfSubData objectAtIndex:i] getBytes:&charArray[i]];
}
,以填補從我的子數據陣列的十六進制的字符數組。這工作幾乎完美。幾乎。
以CARRAY的那個例子,我NSLog(@"pos%i: %x",i,charArray[i])
會告訴我:
pos1: ce
pos2: 2d
pos3: 1e
pos4: 8
和所有的「左零」,因爲同樣的方式supressed。我現在的解決方法(我不確定這是否是最佳做法)是採用我的subDataArray和initWithFormat:
一個字符串。與此我可以將字符串轉換爲一個int與NSScanner scanHexInt:
,但然後我再次將我的小數點轉換爲十六進制CHAR時再次被卡住。以這種方式填充我的char數組的最佳方法是什麼?
任何幫助或一些「強硬的愛」將不勝感激。由於
哦,我明白了。謝謝! 但你是否說 - 除了我的NSLog格式化錯誤 - 所有的字節被整體傳遞給我的charArray與該函數「getBytes」?這真的只是在我的NSLog的錯誤,我不需要改變別的? – Fred 2011-02-24 00:38:20
有點奇怪,你似乎從位置1開始索引你的C數組,而不是0,你似乎有點偏離你的方式,但是。因爲printf(和NSLog)的默認行爲是儘可能少地輸出數字,所以0被切斷。爲了節省跳躍的次數,你還應該檢查你是否可以使用原始的NSData作爲你想要的數組,例如NSLog(@「pos%i:%02x」,i,[data bytes] [i]);所以直接使用由NSData的'bytes'屬性返回的C數組。 – Tommy 2011-02-24 01:47:08
有道理..正如我所說的,我現在沒有使用我的代碼,所以在這裏提出我的問題時,索引的問題可能只是缺乏關注。但是我明天也要檢查。謝謝你的幫助! – Fred 2011-02-24 02:12:29