确定字节输入和显示的值之间的未知关系

时间:2014-03-25 10:51:00

标签: c++ type-conversion

有两个程序,通过共享内存连接。在程序A中,一个c ++控制台应用程序有4个字节保留给一个值,它将在程序B中可视化。我不知道写入的字节值和显示的值之间有什么关系?!

注意:所有值都是十进制表示法;

如果程序A将4个字节设置为0,0,0,0,程序B将显示0;

如果程序A将4个字节设置为1,1,1,1,程序B将显示0;

...一直保持到值跳到57,可能原因是共享内存没有快速更新。我更感兴趣的是检测以下关系:

如果程序A将4个字节设置为57,57,57,57,程序B将显示0.176643;

如果程序A将4个字节设置为58,58,58,58,程序B将显示0.710401;

如果程序A将4个字节设置为59,59,59,59,程序B将显示2.856924;

如果程序A将4个字节设置为60,60,60,60,程序B将显示11.488970;

如果程序A将4个字节设置为61,61,61,61,程序B将显示46.200980;

当然我需要获得关系,因为我想将显示的值设置为特定的数字。

1 个答案:

答案 0 :(得分:3)

您的程序B似乎将四个字节视为IEEE-754单精度float,然后将该数字乘以1000.0。

如果您将输入值的十六进制等效值放在此hex to float conversion tool中,您将看到十进制数字对应于您显示的值:

57 = 0x39, 0x39393939 -> 1.7664292e-4
58 = 0x3a, 0x3a3a3a3a -> 7.1040133e-4
59 = 0x3b, 0x3b3b3b3b -> 2.8569240e-3
60 = 0x3c, 0x3c3c3c3c -> 1.1488970e-2
61 = 0x3d, 0x3d3d3d3d -> 4.6200980e-2

就好像你曾经写过,例如:

uint8_t a[4] = { 57, 57, 57, 57 };
float *fp = static_cast<float *>a;
float f = (*fp) * 1000.0;