【问题标题】:Using a union to read a char array as an unsigned long int使用联合将 char 数组读取为 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 读取字符)。 这样做安全吗?我的程序中是否有任何可能的内容?

【问题讨论】:

    标签: arrays char union long-integer unsigned


    【解决方案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 上显示为编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多