如何将4字节的"char"数组转换为类型为"unsigned long"的一个变


union sUnion {
unsigned long hex;
float var;
};
void Testcode(void)
{
char rdata[4] = { 0xd7, 0xa3, 0x40, 0xc1 };         // to DEC: -12.04
char ctemp[100];
union sUnion r;
r.hex = 0xc140a3d7;       //<=== ??????
sprintf(ctemp, "hex = %x, float = %f", r.hex, r.var);
}

我想把rdata的数据放入r.hex变量中,以产生-12.04的结果

如果断言失败,则更改整数的类型

_Static_assert (sizeof(unsigned long) == 4, "assert1");
#define INTLENGTH sizeof(unsigned long)
//endianess independent
unsigned long covert1(void *varr, int endianness)
{
unsigned char *arr = varr;
unsigned long result;
#define MAXINDEX (INTLENGTH -1)
if(endianess)
result = (unsigned long)arr[0] + ((unsigned long)arr[1] << 8) + ((unsigned long)arr[2] << 16) + ((unsigned long)arr[3] << 24);
else
result = (unsigned long)arr[MAXINDEX - 0] + ((unsigned long)arr[MAXINDEX - 1] << 8) + ((unsigned long)arr[MAXINDEX - 2] << 16) + ((unsigned long)arr[MAXINDEX - 3] << 24);
return result;
}
//arr has to have seme endianness as integers
unsigned long covert(void *arr)
{
unsigned long result;
memcpy(&result, arr, sizeof(result));
return result;
}

最新更新