c - 如何将 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;
}
推荐阅读
- google-play - 已发布的应用在 google play 上显示不同的签名
- reactjs - 表格行不可编辑
- flutter - Flutter SharedPreferences getBool 函数返回 null
- outliers - 如何在高度波动的数据点中查找和纠正异常值
- javascript - 带有 next.js 的内容丰富的富文本
- c# - 为什么尝试加载 System.Configuration.AppSettingsSection 配置部分失败?
- python - 无法使用 psycopg2 创建 citext 列
- reactjs - 如何在 React Native 中使用开/关按钮将数组项显示到列表中?
- r - 将 sjPlot::tab_model() 或其他 html 表格的输出编织到 PDF 文档中
- javascript - 使用标题破坏