使用联合将 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数组

怎么把unsigned char数组转化为字符串类型

将 unsigned char 数组转换为 uint8_t 数组?

C++怎么将 CString 转换成 unsigned char 的数组

如何将C++中string类型的字符串赋给unsigned char数组