为了满足特定编程库的需要,我必须使用一个浮点值并将其存储在一个包含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 的所有内容都是胡言乱语......
答案 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;
这里我们明确地掩盖了我们对每个字节不感兴趣的位。
打印结果时,请记住它不是以空值终止的 字符串,它可能包含不可打印的字符。