将float解析为uchar C ++数组

时间:2015-07-07 17:25:51

标签: c++ arrays binary

为了满足特定编程库的需要,我必须使用一个浮点值并将其存储在一个包含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;

我尝试使用左移和右移来选择numberint的上部和下部,但是现在我进入 parsednumber 的所有内容都是胡言乱语......

1 个答案:

答案 0 :(得分:2)

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;

这里我们明确地掩盖了我们对每个字节不感兴趣的位。

打印结果时,请记住它不是以空值终止的 字符串,它可能包含不可打印的字符。