2013-04-01 4 views
1

Я задаю этот вопрос главным образом потому, что я искал этот сайт для возможных решений, и никто из них не разработал так, как я надеялся.Преобразование Hex String в unsigned char []

Я хотел бы выполнить преобразование этой шестнадцатеричной строки в unsigned char [].

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[] жестко закодирован, и я хотел бы узнать, как справляться с ним динамично. Хотел бы, чтобы все это помогло.

EDIT 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. Что они должны делать? –

+0

1f61E - это шестнадцатеричное значение и (0,8,16,24) - двоичное смещение, возможно, вы слышали о двоичном сдвиге. –

+0

Нет, нет. Спасибо, я прочитаю об этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^