使用联合将 char 数组读取为 unsigned long int
Posted
技术标签:
【中文标题】使用联合将 char 数组读取为 unsigned long int【英文标题】:Using a union to read a char array as an unsigned long int 【发布时间】:2013-03-13 22:10:41 【问题描述】:正如标题所暗示的,本质上我通过联合将 char 数组转换为 unsigned long int(或者更确切地说,读取为 unsigned long int)。
union
char buffer[8];
unsigned long int buffer_ui;
char_array_ui;
我将 8 个字符读入 char 数组,然后将这 8 个字符的值作为 unsigned long int 返回。 (对于那些好奇的人,这是因为我正在从 /dev/urandom 读取字符)。 这样做安全吗?我的程序中是否有任何可能的内容?
【问题讨论】:
【参考方案1】:需要注意的两件事:
只要unsigned long
的大小为 8 个字节,它就是正确的 - 可能并非每个平台都如此。
字节顺序在不同平台上可能不同,从而产生不同的结果。如果您以 unsigned long
的形式读取数据,系统会自动处理以产生正确的结果,但如果您逐字节读取,则顺序就是您存储字节的方式。
【讨论】:
如果是 C++11,long long int
保证是 64 位的,所以在这种情况下你需要unsigned long long int
。
@TimothyShields 我认为问题已从unsigned long long
编辑为unsigned long
,因此我也更改了答案。在任何情况下,long long int
的最小为 64 位。
谢谢 - 但请您清楚地看到我没有编辑我的问题!
@JessMcintosh 好的,答案是一样的。顺便说一句,编辑接近发布的问题并不总是在 SO 上显示为编辑以上是关于使用联合将 char 数组读取为 unsigned long int的主要内容,如果未能解决你的问题,请参考以下文章
在 C 中读取和写入 unsigned char 的缓冲区到文件?
将 unsigned char 数组转换为 uint8_t 数组?