我有一个
数组 memcpy(val,array_a,4);
val[4] = '\0';
我想要做的是组合所有元素并将其存储到val以使其为0x0000084D并将其转换为浮动,即2125。
我试过memcpy
{{1}}
但仍无效。
答案 0 :(得分:5)
首先,0x0000084D
是整数值 2125的大端表示,而不是IEEE float。
其次,不需要复制到另一个char数组(并且在尝试" nul-terminate"数组时)访问第5个元素超出范围。那部分毫无意义。
要将此数组转换为主机上的整数,请先将其复制为标准的32位整数,然后根据计算机的字节顺序进行转换(否则您将在小端机器上获得错误值)
unsigned char array_a[4] = {0x00,0x00,0x08,0x4D};
uint32_t the_int;
memcpy(&the_int,array_a,sizeof(uint32_t));
the_int = ntohl(the_int);
printf("%d\n",the_int);
或没有任何外部转换库使用位移使其与字节无关:
uint32_t the_int = 0;
int i;
for (i=0;i<sizeof(uint32_t);i++)
{
the_int <<= 8;
the_int += array_a[i];
}
你得到2125好了,现在你可以把它分配到一个浮动,如果你喜欢
float test = the_int;