- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 python 中解析十六进制格式的 DEC 32 位单精度浮点值时遇到问题,我正在解析的值以十六进制表示为 D44393DB。原始浮点值约为 108,从发送单元的显示屏读取。
格式指定为:1位符号+8位指数+23位尾数。字节 2 包含符号位 + 指数的 7 个最高有效位字节 1 包含指数的最低有效位 + 尾数的起始最高有效位。
我发现这两种格式唯一不同的是指数的偏差,在 DEC32 中为 128,在 IEEE-754 中为 127 ( http://www.irig106.org/docs/106-07/appendixO.pdf )
使用http://babbage.cs.qc.edu/IEEE-754/32bit.html没有给出预期的结果。
/克里斯托弗
最佳答案
字节是否有可能以某种方式被打乱?您描述的位排列(字节 2 中的符号位,字节 1 中指数的 LSB)与您链接到的附录 O 不同。看起来字节 1 和 2 已交换。
我假设字节 3 和 4 也被交换,因此真正的十六进制值为 43D4DB93。转换为二进制为 0100 0011 1101 0100 1101 1011 1001 0011,因此符号位为 0,表示正数。指数是 10000111(二进制)= 135(十进制),表示因数 2^(135-128) = 128。最后,尾数是 0.1101 0100 1101 1011 1001 0011(二进制),使用附录 O 表示您有前面加0.1,大约是十进制的0.8314。所以根据我的假设,你的数字是 0.8314 * 128 = 106.4。
添加:一些 Python 2 代码可能会澄清:
input = 0xD44393DB;
reshuffled = ((input & 0xFF00FF00) >> 8) | ((input & 0x00FF00FF) << 8);
signbit = (reshuffled & 0x80000000) >> 31;
exponent = ((reshuffled & 0x7F800000) >> 23) - 128;
mantissa = float((reshuffled & 0x007FFFFF) | 0x00800000) / 2**24;
result = (-1)**signbit * mantissa * 2**exponent;
这会产生 result = 106.42885589599609
.
这里是计算尾数的行的解释。首先reshuffled & 0x007FFFFF
产生编码尾数的 23 位:101 0100 1101 1011 1001 0011。然后 ... | 0x00800000
设置隐藏位,产生 1101 0100 1101 1011 1001 0011。我们现在必须计算分数 0.1101 0100 1101 1011 1001 0011。根据定义,这等于 1*2^(-1) + 1*2^(-2) + 0*2^(-3) + ... + 1*2^(-23) + 1*2^(-24)
。这也可以写成(1*2^23 + 1*2^22 + 0*2^21 + ... + 1*2^1 + 1*2^0) / 2^24
。括号中的表达式是1101 0100 1101 1011 1001 0011(二进制)的值,所以我们可以通过除(reshuffled & 0x007FFFFF) | 0x00800000
来找到尾数。 2^24。
关于python - 在python中解析十六进制格式的DEC 32位单精度浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1797806/
我必须编写一个程序,将无符号十六进制转换为十进制,将十进制转换为十六进制,将有符号十六进制转换为十进制,将十进制转换为十六进制,而不使用流过滤器“十六进制”和“十进制”。我的程序适用于 hex 到 d
'2009-12 Dec' should be converted to '31-DEC-2009' '2010-09 Sep' should be converted to '30-SEP-2010
我想在串行监视器中写入一个十六进制数,这应该转换为十进制整数。 LCDShield lcd; byte byteR; int color = 0; if (Serial.available()) {
我需要一些帮助,将我从汽车中的 OBD 适配器获得的答案转换为十进制,然后将转换后的任何值添加到公式并打印出来。 private class ConnectedThread extends Threa
我必须编写一个程序来读取 2 个数字中不带 0 的整数,并说明第二个是否由第一个的循环变换构成。例如:4123,3412,2341 和 1234 是由 1234 循环变换而成。现在这是我的代码: #i
Delphi documentation表示可以重载 Inc 和 Dec 运算符;我认为没有有效的方法可以做到这一点。以下是重载 Inc 运算符的尝试;有些尝试会导致编译错误,有些会导致运行时访问冲突
在 Meteor 排行榜示例中有这一行: Players.update(Session.get("selected_player"), {$inc: {score: 5}}); 我怎样才能优雅地减
实际上我猜这个问题是重复的,但我不明白我的 SQL 代码有什么问题。我的错误是 Notice: Undefined index: CI in C:\wamp\www\LOCATIONVIEWER\ex
我有: std::cout << "Start = " << std::dec << (&myObject) << std::endl; 以十进制输出地址。但是,地址仍然是十六进制的?? (我正在为
我想将二进制字符串转换为 dec。 public class HelloWorld{ public static void main(String []args){ Syst
我在 Delphi 2010 中使用 Inc 和 Dec 过程时遇到问题。 这是我的代码片段: if NOT(frmMain.Height = 0) then begin Dec(frmMain.
在反汇编代码中: movsx eax,[address1] # a few fpu computations dec eax # so many fpu computations jz label2
我正在尝试使用 findAndModify 以原子方式更新文档的一个值,根据我的阅读,这在同一文档中是原子的。根据我的单元测试,这些值没有被修改。 我在 Java 中使用 mongoTemplate,
我正在用 C++ 创建一个包含 3 列 Dec Okt Hex 的表格。 输入应该是一个大于或等于1的整数,然后打印一个三列的表格,其中从1到加载的所有整数以十进制、八进制和十六进制指定。 例如我们输
字符串 str_hex 包含字母 A-J 的十六进制值,对应于十进制值 65-74。我正在尝试将每个十六进制值转换为其十进制值 following this example .它适用于 for 循环内
由于本学期我在物理学校学习了数字系统类(class),所以我决定尝试将我们在那里学到的知识应用到我自学的编程实践中。是的,出于某种原因我们根本不这样做。不管怎样,下面是我的代码: #include
00101=5位数字,忽略两个零并计算 0+(5-2-1)^2 = 4 4+(5-3-1)^2 = 5 5+(5-4-1)^2 = 5 最终答案是否正确? char[] charArray = bin
作为练习的一部分,我必须重写一个递归函数,以使新函数不递归。这两个函数都需要将正十进制整数输入转换为它们的等效二进制数。 这是使用递归的代码: void convert(int n) { //recu
此代码将 unsigned long vector 变量 cR1 转换为 NB_ERRORS 数字(在 a 变量中我打印了这些数)。 #include #include #include int
我在将十六进制值转换为带符号的十进制值时遇到问题。我正在使用 Qt,这是示例代码。 #include #include int main(int argc, char *argv[]) {
我是一名优秀的程序员,十分优秀!