Проблемы с преобразованием Dec в Hex (Int в Char) - PullRequest
1 голос
/ 24 февраля 2011

я знаю, что это кажется глупым вопросом, но у меня действительно возникают проблемы.

Я работаю в проекте, где у меня есть некоторые функции, которые я не могу изменить.То есть, у меня есть некоторые функции C (не совсем моя специальность) внутри моего Obj.Код на C, который я могу изменить.

Итак, это ... объяснить немного, что у меня есть.

Я получаю NSData типа "\xce\x2d\x1e\x08\x08\xff\x7f".Я должен поместить каждый \ шестнадцатеричный код в массив символов, например:

    cArray[1]=ce;
    cArray[2]=2d;
    cArray[3]=1e; 
    cArray[4]=08;

и т. Д. И т. Д., Конечно, не ЛЮБИТЕ ЭТО, но просто чтобы вы поняли.Моим первым шагом было разделение NSData с помощью subdataWithRange: и заполнение массива всеми «подданными».Поэтому следующим шагом может быть передача каждой позиции этого массива в массив символов, и вот где я застрял.

Я использую что-то вроде (сейчас у меня нет кода)

for(int i=0 ; i<=64 ; i++) {
[[arrayOfSubData objectAtIndex:i] getBytes:&charArray[i]];
}

Чтобы заполнить массив char шестнадцатеричным из моего массива subData.Это работает почти идеально.Почти.

Если взять этот пример cArray, мой NSLog(@"pos%i: %x",i,charArray[i]) покажет мне:

pos1: ce
pos2: 2d
pos3: 1e
pos4: 8

И все «левые нули» подавляются таким же образом.Мой обходной путь на данный момент (и я не уверен, что это лучшая практика здесь) - взять мой subDataArray и initWithFormat: строку с ним.С этим я могу преобразовать строку в int с помощью NSScanner scanHexInt:, но затем я снова застреваю при преобразовании обратно моего десятичного числа int в шестнадцатеричный CHAR.Какой лучший способ заполнить мой массив символов таким образом?

Любая помощь или некоторая "жесткая любовь" будут высоко оценены.Спасибо

1 Ответ

2 голосов
/ 24 февраля 2011

В соответствии с обычными правилами printf форматирования (что также следует NSLog) вам нужно следующее:

NSLog(@"pos%i: %02x", i, charArray[i]);

'0' говорит левой клавише с 0 и является флагом. «2» означает, что для этого поля выводится не менее двух символов. Это обеспечит вывод по крайней мере двух символов и заполнение слева нулями, чтобы заполнить пробел.

...