x-Byte als unsigned long
-
Hi zusammen ich hatte hier nach 4 Byte in unsigned long gefragt. Jetzt will ich aber mit dieser FKT nur 2 Byte abfragen, das geht aber nicht!
also nochmal die FKT:unsigned char* pBuffer = new unsigned char[laenge]; //Göße des Puffers for (unsigned long i = 0;i<laenge;i++) Wavefile.seekg(BlockStartbyte); //geh an die Startposition Wavefile.read(pBuffer, laenge); //einlesen (binär) unsigned long Longwert_Block = *(reinterpret_cast<unsigned long*>(pBuffer));wenn ich FD F8 als dezimalen Wert will dann bekomm ich ne Zahl die wenn ich sie zurück in Hex rechne so aussieht:
FD FD F8 FD
ich habe ein array der Länge 2 angelegt und wenn ich jetzt an der Stelle 3 und 4
=0 mach dann gehts, aber das kann ja nicht sein!muss ich das nun immer auf DW auffüllen mit 0en???
-
unsigned long Longwert_Block = (reinterpret_cast<unsigned long>(pBuffer));
Der compiler hat schon recht. du castest einen pointer auf einen 2-byte wert auf einen poiter auf einen 4-byte wert und dereferenzierst nachher.
richtig wäreunsigned long Longwert_Block = reinterpret_cast<unsigned long>(*pBuffer);Kurt
-
Compiler schrieb:
error C2440: 'reinterpret_cast' : cannot convert from 'unsigned char' to 'unsigned long'
Geht leider nicht. s.o.
kannst du mir das mit den 2 bzw 4 Byte erklären? Ich hab die Zeile nämlich net verstanden.
-
Manchmal sollte man etwas nachdenken wenn man auf fragen antworten will. meine Antwort war schlichtweg Blödsinn. Dein cast war schon richtig. Der Fehler muss wo anders liegen.
Zeig mal den ganzen code. also auch wie du wieder zurück rechnest;
Kurt
-
zurück rechne ich mit dem TR das ist der ganze Code!
mit dem TR einfach die dez Zahl eingeben und auf Hex drücken!
-
mit dem cast
unsigned long Longwert_Block = *(reinterpret_cast<unsigned long*>(pBuffer));sagst du zum compiler: nimm den pointer auf ein char pBuffer interpretiere das als pointer auf ein unsigned long ( 4-byte lang ) und dereferenziere das. er wird also die ersten 4 bytes im puffer als unsigned long interprätieren.
Wenn ich dich richtig verstanden habe soll er aber nur die ersten 2 bytes als unsigned long interprätieren. das geht dann sounsigned long Longwert_Block = static_cast<unsigned long>(*(reinterpret_cast<unsigned short*>(pBuffer)));Kurt
-
WOW so gehts tatsächlich!
Genial! Ich glaub ich hätte mir von hinten durch die Brust ins Auge geschossen bei dem Versuch es auf diese Art und weise zu machen!
Vielen Dank!
-
ZuK schrieb:
Wenn ich dich richtig verstanden habe soll er aber nur die ersten 2 bytes als unsigned long interprätieren. das geht dann so
unsigned long Longwert_Block = static_cast<unsigned long>(*(reinterpret_cast<unsigned short*>(pBuffer)));Wobei das static_cast überflüssig ist, das macht der Compiler implizit.