有两个程序,通过共享内存连接。在程序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;
当然我需要获得关系,因为我想将显示的值设置为特定的数字。
答案 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;