C语言中关于16进制转double的有关问题,求高手!
C语言中关于16进制转double的问题,急求高手!!!
我现在又一个这样的数组
unsigned char PVCOMMAND_send[132] = { 0x00,0x00,
0xD2,0xFB,0xC6,0xD7
,0x9E,0x59,0x22,0x03
,0x00,0x00};
我需要把中间两行连成0322599ED7C6FBD2,然后算成一个doubule的数。
我现在是这么算的‘
pv_elc_power_num =(double) ((PVCOMMAND_rev[9]<<56)|(PVCOMMAND_rev[8]<<48)|(PVCOMMAND_rev[7]<<40)|(PVCOMMAND_rev[6]<<32)|(PVCOMMAND_rev[5]<<24)|(PVCOMMAND_rev[4]<<16)|(PVCOMMAND_rev[3]<<8)|PVCOMMAND_rev[2]);
但是得出的是一个负数,请问我应该怎么转换?
------解决方案--------------------
用sprinf()函数格式化成字符串 然后再转换
------解决方案--------------------
unsigned char PVCOMMAND_send[8] = { 0xD2,0xFB,0xC6,0xD7,0x9E,0x59,0x22,0x03 };
//去掉前后的0x00
__int64 n64Hex = *( __int64* )PVCOMMAND_send;
double dDouble = ( double )( n64Hex * 1.0 );
不知道这样符不符合要求?
------解决方案--------------------
unsigned char PVCOMMAND_send[8] = { 0xD2,0xFB,0xC6,0xD7,0x9E,0x59,0x22,0x03 };
//去掉前后的0x00
__int64 n64Hex = *( __int64* )PVCOMMAND_send;
double dDouble = *( double *)( &n64Hex );
我现在又一个这样的数组
unsigned char PVCOMMAND_send[132] = { 0x00,0x00,
0xD2,0xFB,0xC6,0xD7
,0x9E,0x59,0x22,0x03
,0x00,0x00};
我需要把中间两行连成0322599ED7C6FBD2,然后算成一个doubule的数。
我现在是这么算的‘
pv_elc_power_num =(double) ((PVCOMMAND_rev[9]<<56)|(PVCOMMAND_rev[8]<<48)|(PVCOMMAND_rev[7]<<40)|(PVCOMMAND_rev[6]<<32)|(PVCOMMAND_rev[5]<<24)|(PVCOMMAND_rev[4]<<16)|(PVCOMMAND_rev[3]<<8)|PVCOMMAND_rev[2]);
但是得出的是一个负数,请问我应该怎么转换?
------解决方案--------------------
用sprinf()函数格式化成字符串 然后再转换
------解决方案--------------------
unsigned char PVCOMMAND_send[8] = { 0xD2,0xFB,0xC6,0xD7,0x9E,0x59,0x22,0x03 };
//去掉前后的0x00
__int64 n64Hex = *( __int64* )PVCOMMAND_send;
double dDouble = ( double )( n64Hex * 1.0 );
不知道这样符不符合要求?
------解决方案--------------------
unsigned char PVCOMMAND_send[8] = { 0xD2,0xFB,0xC6,0xD7,0x9E,0x59,0x22,0x03 };
//去掉前后的0x00
__int64 n64Hex = *( __int64* )PVCOMMAND_send;
double dDouble = *( double *)( &n64Hex );