printf в microblaze для преобразования шестнадцатеричного кода в char

Я пытаюсь xil_printf() внутри цикла for и передать его в SendBuffer через uart. Как можно печатать символы вместо целых чисел? Все, что он печатает, это шестнадцатеричный номер...

uint32_t IRAM;
for(Index=0; Index<tsize; Index++){
  int sb = Index*sizeof(uint32_t);
  IRAM = XIo_In32(RAMADD+sb);
  xil_printf("Data: %08x\n\r",IRAM);
}

Это печатает шестнадцатеричные символы:

Data: 00004241
Data: 00004443
Data: 00004645
Data: 00004847

Я попытался :

xil_printf("Data: %08c\n\r",IRAM)

и он печатает одиночные символы:

Data: A
Data: C

Как я могу напечатать следующее (преобразование шестнадцатеричных символов 4241 в AB, 4443 в CD и т. д.)?

Data: AB
Data: CD

person chickegg    schedule 13.11.2013    source источник
comment
Пожалуйста, уточните свой вопрос: как я могу распечатать 16? - что вы хотите напечатать?   -  person anatolyg    schedule 14.11.2013
comment
добавлено уточнение! Почему отрицательный голос?   -  person chickegg    schedule 14.11.2013


Ответы (1)


Вам нужно напечатать два байта/символа, поэтому вы можете указать это явно в строке формата:

xil_printf("Data: %c%c\n\r", char1, char2);

Но сначала вам нужно рассчитать байты для печати. Например:

int char1 = (IRAM >> 8) & 0xff;
int char2 = IRAM & 0xff;

(возможно, переключите char1 ‹-> char2; я не уверен, в каком порядке вы хотите их напечатать)

person anatolyg    schedule 13.11.2013
comment
гений. это работает... Можете ли вы объяснить IRAM >> 8? Это сдвигается на 1 байт, получая следующий символ, верно? - person chickegg; 14.11.2013
comment
@chickegg Да; но вы должны быть осторожны, чтобы избежать путаницы в отношении следующего символа. Ваше определение next является прямым. Согласно порядку с обратным порядком байтов, следующий байт (xxx >> 0) является следующим. Такие имена, как более значимые и менее значимые, не являются двусмысленными в этом смысле. - person anatolyg; 14.11.2013