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。

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

最佳答案

您的程序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/

10-11 23:18
查看更多