将浮点数解析为 uchar C++ 数组

Parsing a float to an array of uchar C++

为了满足特定编程库的需要,我必须采用浮点值并将其存储在由 C++ 中的无符号字符(0-255 范围)组成的数组中。

说我有

float x = 32.453;
unsigned int xx = x * 1000; // xx == 32453, since I want to keep the 3 decimals

如果我手动将 32453 转换为二进制格式:0b 0111 1110 1100 0101 或 0x7EC5

所以,我想要一个无符号字符数组:

unsigned char parsednumber [2];
parsednumber[0] = 0x7E;
parsednumber[1] = 0xC5;

到目前为止我有:

float number = 32.453
unsigned int numberuint = number * 1000;

unsigned char parsednumber [2];
parsednumber[0] = (numberuint << 8) >> 8;
parsednumber[1] = numberuint >> 8;
cout << parsednumber << endl;

我尝试使用左移和右移来 select numberint 的上下部分,但现在我在 parsednumber 中得到的都是乱码.. .

unsigned char parsednumber [2];
parsednumber[0] = (numberuint << 8) >> 8;
parsednumber[1] = numberuint >> 8;

parsednumber[0] 的赋值可能不是您所需要的。你只是 将它向左移动 8 位,然后通过右移 8 位来取消它。 它可能会清除高位,也可能不会。

相反,考虑这个(假设最低有效字节在前):

unsigned char parsednumber [2];
parsednumber[0] = numberuint & 0xff;
parsednumber[1] = (numberuint >> 8) & 0xff;

这里我们明确屏蔽掉每个字节不感兴趣的位。

打印结果时,请记住它不是以 null 结尾的 字符串,它可能包含不可打印的字符。