Short werte aus Array von Bytes lassen sich nicht ablesen oder kasten
-
Wie soll ich in C++ kasten , so dass ich in den Array von Bytes die 2 -Bytes
Werte (short) ablesen könnte ?beim
reinterpret_cast<uint16_t *>(...)kommt ein Fehlermeldung raus : error: reinterpret_cast from type ‘const uint8_t* {aka const unsigned char*}’ to type ‘uint16_t* {aka short unsigned int*}’ casts away qualifiers
-
o4kareg schrieb:
Wie soll ich in C++ kasten , so dass ich in den Array von Bytes die 2 -Bytes
Werte (short) ablesen könnte ?beim
reinterpret_cast<uint16_t *>(...)kommt ein Fehlermeldung raus : error: reinterpret_cast from type ‘const uint8_t* {aka const unsigned char*}’ to type ‘uint16_t* {aka short unsigned int*}’ casts away qualifiersÖhm.. du darfst in C++ const nicht wegcasten. Außer du verwendest const_cast
EDIT: Und ich glaube nicht das das casten das machst was du dir vorstellst.
-
Danke, es war voll unklar das das ding wegen Const meckert.
Eine ziemlich korrekte Lösung wäre dann:
const uint16_t * lvl2Num = reinterpret_cast<const uint16_t *> (paket +toLook);Omg, es funktioniert, aber dabei werden die bytes umgetausht

Nee, c++ macht doch fertig!
-
Du willst also ein Short in 2 Byte splitten:
Ungefähr so?#include <iostream> unsigned char extract(unsigned short in, unsigned short lowerBound, unsigned short upperBound) { if (upperBound > 8) { lowerBound -= 8; upperBound -= 8; in /= 128; } unsigned char result = 0; for (unsigned char i = 1 << (upperBound - 1); i >= lowerBound; i >>= 1) { if (in & i) result += i; } return result; } //Testcode int main() { unsigned short tmp = 4244; unsigned char ch1 = extract(tmp,1,8); unsigned char ch2 = extract(tmp,9,16); std::cout << static_cast<int>(ch1) << '\n'; std::cout << static_cast<int>(ch2) << '\n'; }
-
logoffters schrieb:
Du willst also ein Short in 2 Byte splitten:
Ungefähr so?#include <iostream> unsigned char extract(unsigned short in, unsigned short lowerBound, unsigned short upperBound) { if (upperBound > 8) { lowerBound -= 8; upperBound -= 8; in /= 128; } unsigned char result = 0; for (unsigned char i = 1 << (upperBound - 1); i >= lowerBound; i >>= 1) { if (in & i) result += i; } return result; } //Testcode int main() { unsigned short tmp = 4244; unsigned char ch1 = extract(tmp,1,8); unsigned char ch2 = extract(tmp,9,16); std::cout << static_cast<int>(ch1) << '\n'; std::cout << static_cast<int>(ch2) << '\n'; }#include <iostream> unsigned char extract(unsigned short in, unsigned short lowerBound, unsigned short upperBound) { unsigned char result = 0; if (upperBound > 8) result = in / 256; else { for (unsigned char i = 1 << (upperBound - 1); i >= lowerBound; i >>= 1) { if (in & i) result += i; } return result; } } int main() { unsigned short tmp = 25524; unsigned char ch1 = extract(tmp,1,8); unsigned char ch2 = extract(tmp,9,16); std::cout << static_cast<int>(ch1) << '\n'; std::cout << static_cast<int>(ch2) << '\n';Wohl eher so.
-
unsigned char extract(unsigned short in, unsigned short lowerBound, unsigned short upperBound) { unsigned char result = 0; if (upperBound > 8) result = in / 256; else { for (unsigned char i = 1 << (upperBound - 1); i >= lowerBound; i >>= 1) { if (in & i) result += i; } } return result; }MIST! Fehler gemacht bei Klammern.