我只是想从BYTE数组中获取一个8 BYTE REAL浮点数,该数组是我先前从文件的内容生成的,作为浮点数。
目前,我知道8 BYTE Real和double相同。因此,在逻辑上必须读出8个字节并将它们直接分配给变量。 不幸的是,它没有我想象的那样。
作为说明:
我的字节数组,用于控制文件中存储的十六进制值的输出。
uint64_t result = 0;
for (int i = 0; i < 8; i++){
result = file_buf[content + i];
wsprintf(Outbuf + i*2, L"%02X", result);
OutputMessage(Outbuf, 0);
}
从输出中的文件返回正确的十六进制值
C1D6D420937EE766
wsprintf必须使用它,因为我使用API工作并且依赖于whitecharbuffer。
到目前为止,我已经尝试了以下方法:
resdouble = (double)*&file_buf[content];
swprintf(Outbuf, 200, L" Typ: REAL (8-byte): %Lf\n", resdouble);
OutputMessage(Outbuf, 0);
支出:
Typ: REAL (8-byte): 193,000000
另一种尝试:
result = file_buf[content]<<24;
result = result + (file_buf[content + 1] << 16);
result = result + (file_buf[content + 2] << 8);
result = result + ((file_buf[content + 3]));
result = result << 32;
result = result + (file_buf[content + 4] << 24);
result = result + (file_buf[content + 5] << 16);
result = result + (file_buf[content + 6] << 8);
result = result + (file_buf[content + 7]);
memcpy(&resdouble, &result, 8);
wsprintf(Outbuf, L"HEX Result 8 Byte %16X", resdouble);
OutputMessage(Outbuf, 0);
swprintf(Outbuf, 200, L" Typ: REAL (8-byte): %Lf\n", resdouble);
OutputMessage(Outbuf, 0);
输出:
HEX Result 8 Byte 937EE766
Typ: REAL (8-byte): -1532001869,982873
页面正确的结果: http://www.binaryconvert.com/result_double.html?hexadecimal=C1D6D420937EE766
,但必须得出-1,532002893982。 逗号计算错误。
为什么我会弄错双精度数,我该怎么做才能得到-1,532001而不是-1532001869,982873?
编辑: 我尝试从@ Gerhardh
(double)(*&file_buf[content]);
resdouble = *(double*)&file_buf[content];
swprintf(Outbuf, 200, L"Typ: REAL:\t%f\n", resdouble);
OutputMessage(Outbuf, 0);
swprintf(Outbuf, 200, L" Typ: HEX (8-byte): %X\n", resdouble);
OutputMessage(Outbuf, 0);
输出:
Typ: REAL: 5111310630843501598..........
Datentyp: HEX (8-byte): 20D4D6C1
第一行中有byteswap
_byteswap_uint64(file_buf[content]);
我有相同的结果。
答案 0 :(得分:1)
必须将ergebnis
强制转换为一个字节,然后填充每个字节。完成后,您将拥有uint64。例如:
union {
unsigned char b[8];
uint64_t d;
} ergebnis;
for (int i = 0; i < 8; i++){
ergebnis.b[i] = file_buf[inhalt + i];
}
wsprintf(Ausgabebuf + i*2, L"%02X", ergebnis.d);
还请注意系统的“字节序”,否则可能需要反转循环