2013-03-13 41 views
0

作为标题提示,本质上我通过联合将char数组转换为unsigned long int(或者更确切地说,读为unsigned long int)。使用联合来读取char数组作为无符号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个字节 - 也许就不会那么每个平台上。
  • Endianness可能会在各种平台上有所不同,从而产生不同的结果。如果您读取的数据是unsigned long,它会自动处理以产生正确的结果,但如果您在字节后读取它,那么顺序就是您存储字节的方式。
+0

如果是C++ 11,'long long int'保证为64位,所以在这种情况下,你需要'unsigned long long int'。 – 2013-03-13 22:17:08

+0

@TimothyShields我认为这个问题是从'unsigned long long'编辑为'unsigned long',所以我也改变了答案。无论如何,'long long int'具有**最小** 64位大小。 – SomeWittyUsername 2013-03-13 22:23:39

+0

谢谢 - 但请,你可以清楚地看到我没有编辑我的问题! – JessMcintosh 2013-03-13 22:47:31

相关问题