2016-02-01 2 views
-2

У меня есть следующие проблемы при использовании тетсра:Копирования двоичных данных с тетсром в с

Предположат, что шестнадцатеричные данные должны быть скопированы в двоичном, например: 203800000E820006, а затем применить следующую инструкцию:

unsigned char buffer[8]; 
memcpy(buffer,"\x20\x38\x00\x00\x0E\x82\x00\x06",8); 

Однако, когда я пишу данные в двоичном формате, он печатает только два первых байта в двоичном формате, потому что \ x00 интерпретируется как ограничитель строк. Как избежать или исправить это, чтобы представить 16-символьную строку в двоичном формате с 8 символами?

+0

Что вы имеете в виду под «он появляется только» ?! Появляется где? Кроме того, почему «+1»? Это 8 байтов данных, правильно? –

+2

Ваш код в порядке, и ваш массив 'buffer' должен содержать только те 8 байтов, которые вы хотите. Почему вы говорите «это только первые два байта»? Вы делали 'printf («% s », buffer)' или что-то еще? Это имеет смысл, потому что '% s' ожидает строку с нулевым завершением, поэтому она остановилась, когда увидела ее. Но остальная часть данных была там (она просто не печаталась). –

+2

@ TinoReyna Это не строка. Не называйте это строкой. Если вы его распечатаете, вы должны использовать код, который знает, как печатать 8 байтов двоичных данных. Вы используете такой код? –

ответ

3

Буфер, который у вас есть, не является строкой. Вы не можете обрабатывать его, как один, передавая его функциям, ожидающим строку, такую ​​как strcat, strcpy, strcmp или спецификатор формата %sprintf.

У вас есть массив символов, так что печатать их как таковые:

int i; 
for (i=0;i<sizeof(buffer);i++) { 
    printf("%02hhX ", buffer[i]); 
} 
printf("\n"); 

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

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