Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
有两个程序,它们通过共享内存连接。在程序A中,一个c ++控制台应用程序为该值保留了4个字节,这些值将在程序B中显示。我不知道写入的字节值和显示的值之间是什么关系?
注意:所有值均为十进制表示法;
如果程序A将4个字节设置为0、0、0、0,则程序B将显示0;否则,程序B将显示0。
如果程序A将4个字节设置为1、1、1、1,则程序B将显示0;否则,程序B将显示0。
...保持不变,直到该值跳到57,这可能是因为共享内存的更新速度没有那么快。我对检测以下关系更感兴趣:
如果程序A将4个字节设置为57、57、57、57,则程序B将显示0.176643;否则,程序B将显示0.176643。
如果程序A将4个字节设置为58、58、58、58,则程序B将显示0.710401;否则,程序B将显示0.710401。
如果程序A将4个字节设置为59、59、59、59,则程序B将显示2.856924;
如果程序A将4个字节设置为60、60、60、60,则程序B将显示11.488970;否则,程序B将显示11.488970。
如果程序A将4个字节设置为61、61、61、61,则程序B将显示46.200980;否则,程序B将显示46.200980。
当然,我需要获取关系,因为我想将显示的值设置为特定的数字。
就好像您已经写过,例如:
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
有两个程序,它们通过共享内存连接。在程序A中,一个c ++控制台应用程序为该值保留了4个字节,这些值将在程序B中显示。我不知道写入的字节值和显示的值之间是什么关系?
注意:所有值均为十进制表示法;
如果程序A将4个字节设置为0、0、0、0,则程序B将显示0;否则,程序B将显示0。
如果程序A将4个字节设置为1、1、1、1,则程序B将显示0;否则,程序B将显示0。
...保持不变,直到该值跳到57,这可能是因为共享内存的更新速度没有那么快。我对检测以下关系更感兴趣:
如果程序A将4个字节设置为57、57、57、57,则程序B将显示0.176643;否则,程序B将显示0.176643。
如果程序A将4个字节设置为58、58、58、58,则程序B将显示0.710401;否则,程序B将显示0.710401。
如果程序A将4个字节设置为59、59、59、59,则程序B将显示2.856924;
如果程序A将4个字节设置为60、60、60、60,则程序B将显示11.488970;否则,程序B将显示11.488970。
如果程序A将4个字节设置为61、61、61、61,则程序B将显示46.200980;否则,程序B将显示46.200980。
当然,我需要获取关系,因为我想将显示的值设置为特定的数字。
最佳答案
您的程序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;
关于c++ - 确定输入的字节数和显示的值之间的未知关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22632301/