Diffiziles Problemchen bei Umwandlung von int in Hex
-
Ich lese eine Datei bytewise über char buffer aus und an einer bestimmten Stelle finde ich dann ein wave file. Um das wave file ganz heraulösen zu können muss, ich dessen länge wissen, die vom 5 - 8 byte (als little endian) des waves definiet ist. wie kann ich jetzt den HEXwert, der da steht umrechnen in int (Länge es Files).
jetz habe ich es so gelöst:
const string intToHex( int i) { ostringstream oss; oss << hex << i; return oss.str(); } string vier = intToHex((int)buffer[i+7]); string drei = intToHex((int)buffer[i+6]); string zwei = intToHex((int)buffer[i+5]); string eins = intToHex((int)buffer[i+4]); string zusammen = "0x" + vier + drei + zwei + eins; long int test = strtol(zusammen.c_str(), NULL, 16);Das klappt auch. Jedoch wenn ich auf ein byte wie zb "FC" treffe, stimmt es alles nicht mehr, enn FC wird nach - 4 convertiert.
Kann mir vllt. jemand helfen? Wäre nett.
Tom
-
string vier = intToHex((int)(unsigned char)buffer[i+7]);
-
Es funktioniert! VIELEN DANK VOLKARD!
-
Umständlicher als über die (doppelte) Stringkonvertierung geht es wohl kaum...
Nimm stattdessen:
unsigned char *b = static_cast<unsigned char *>(buffer); int length = (b[i+7] << 24) | (b[i+6] << 16) | (b[i+5] << 8) | b[i+4];
-
Danke für den Tipp! Ich habe es jetzt schon so umgesetzt und es war mir auch klar, dass es auch viel effizienter geht. Das Programm braucht ich doch nur kurz für mich und es musste schnell gehen.