我正在尝试将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);
谢谢。
答案 0 :(得分:0)
我发现将_byteswap_ulong转换为_byteswap_ushort后,结果完全相同。
答案 1 :(得分:0)
我怀疑问题是你只看到四分之二的字节。
在第一个示例中,您获得值0xAC01(428)。
在第二个例子中,你取myDouble
即0x01AC0000并将其转换为0x0000AC01(28049408)。
如果您只想要一个字,请使用_byteswap_ushort((unsigned short)myDouble)
。