zahlen aneinander reihen
-
Also mein problem ist folgendes
nach einer eingabe habe ich 4 Bytes mit jeweils einer zahl
Das ganze sieht so im speicher aus(mit der zahl 9999):Binär:
|0000 1001|0000 1001|0000 1001|0000 1001|
Hexadezimal:
|09|09|09|09|
Dezimal:
|009|009|009|009|
Wie mus ich jetzt vorgehen wen ich die jetzt zusamen schieben will zur 9999
also so das im speicher das hier steht:Binär:
|0000 0000|0000 0000|0010 0111|0000 1111|
Hexadezimal:
|00|00|27|0F|
Dezimal:
|000|000|39|255|
-
Interpretiere je zwei Bytes als unsigned short. Addiere dann die shorts unter Berücksichtigung der Wertigkeit. Also ungefähr so:
for i = 0 to 3 s[3 - i] = *reinterpret_cast<unsigned short*>(bytearray[2 * i]); sum = 0 for i = 0 to 3 sum += 10**i * s[i]
Edit: signed -> unsigned.
-
also soll ich wen ich das richtig interpretiere 2 bytes zu einen short zusmane fassen und die beiden dann addieren ? also so:
09 09 + 09 09 = 12 12
aber dann kommt doch nicht mein gewünschter wert raus oder habe ich was missverstanden ?
erwähnen sollte ich vieleicht noch das ich das versuche mit Assembler zu realissieren im MASM
ich habe gedacht das könnte man mit einer einfachen formel löse
deswegen habe ich hier den thread aufgemacht
edit: ich habe mal im Assembler forum gepostet das hier kann geclosed oder gelöscht werden
-
Hallo TomHalo,
ich glaube, Michael hat sich da vertan. In jedem Byte steht doch bereits eine 9 - also muss man die nur zusammenrechnen.
#include <iostream> int main() { using namespace std; char speicher[] = { 0x09, 0x09, 0x09, 0x09 }; int wert = 0; for( char* p = speicher; p != speicher + sizeof(speicher); ++p ) { wert *= 10; wert += int(*p); } cout << hex << wert << endl; return 0; }
Ausgabe: "270f"
Gruß
Werner
-
Ach, das ist nur ein Byte pro Ziffer. Hatte mich schon gewundert, warum jede Ziffer in zwei Bytes gespeichert sein soll