ich hab ein eher generelles C++ Problem.
Und zwar lese ich aus einem FPGA 32 Bit (U32) Werte, die ich in einem Struct speichere:
Code: Alles auswählen
typedef union _U32TOBYTE
{
UINT reg;
struct regs
{
unsigned char byte1 : 8;
unsigned char byte2 : 8;
unsigned char byte3 : 8;
unsigned char byte4 : 8;
} regs;
} U32TOBYTE; Diese Werte packe ich element-weise in ein unsigned char[] Array:
Code: Alles auswählen
data[i*4] = U32TOBYTE_VALUE.regs.byte1;
data[i*4+1] = U32TOBYTE_VALUE.regs.byte2;
data[i*4+2] = U32TOBYTE_VALUE.regs.byte3;
data[i*4+3] = U32TOBYTE_VALUE.regs.byte4;Diese Werte möchte ich unverändert hexadezimal ausgeben lassen.
Über
Code: Alles auswählen
printf("0x%02X%02X%02X%02X\n", data[i*4], data[i*4+1] ,data[i*4+2] ,data[i*4+3]);Mit
Code: Alles auswählen
qtext.append(QString::number(data[i],16));Aber das kommt mir viiiel zu umständlich vor. Habe mittlerweile stundenlang gegoogled, CPP und QT Refs gelesen, finde aber dennoch keine bessere Varianten. Darüber hinaus nutze ich sonst im Programm nur STD::cout ausgaben - aber damit werden die 8 bit char werte immer implizit in 32 bit werte umgewandelt ...
Wisst ihr schönere Wege?
edit:
mir ist gerade aufgefallen, dass 0x"0" aus der Hardware (also 4 hintereinanderfolgende Nullen) ignoriert werden.
wenn in der HW beispielsweise 0x"AA00BBCC" steht und ich es auslese, bekomme ich 0x AABBCC... warum?