1

我正在尝试将 double 转换为 little-Endian 十六进制字符串或直接转换为特定类型的 long(见下文)。

以前,我将预定义的 little-Endian 十六进制字符串转换为 long,如下所示。

string hcommand = "01AC"; char * p; long n = strtol(hcommand.c_str(), &p, 16); 这按预期工作。

现在我正在尝试将 double 转换为 little-Endian(最低有效字节优先)形式的十六进制字符串(然后替换上面代码中的 hcommand)或直接从 double 转换为与上面看到的相同类型的 long。

我试过了,它的处理方式与上面不同。

double myDouble = 44033; long hcommand = (long)_byteswap_ulong((int)myDouble);

谢谢你。

4

2 回答 2

0

我发现将 _byteswap_ulong 转换为 _byteswap_ushort 后结果是相同的。

于 2012-09-05T23:51:08.030 回答
0

我怀疑问题在于您只查看了四个字节中的两个。

在您的第一个示例中,您得到值 0xAC01 (428)。

在第二个示例中,您将myDouble0x01AC0000 转换为 0x0000AC01 (28049408)。

如果您只想要一个单词,请使用_byteswap_ushort((unsigned short)myDouble).

于 2012-09-05T23:51:18.763 回答