【发布时间】:2015-08-26 04:12:33
【问题描述】:
是否有正确或常规的方法来保证数据类型的大小为 4?
之前我刚刚做了一些基于 sizeof 不同数据类型的 typedef 语句,我想知道是否有更好或更传统的方法来在不同的架构上拥有预先确定大小的数据类型?
为了这个问题,假设我有大量从文件中读取的字符。我想从这个 char 数组中读取一系列 24 位整数。过去,我将数组转换为具有所需数据类型 sizeof 的数据类型,但是如果没有具有所需大小的原始数据类型,此方法将失败。
处理这种情况的最佳方法是什么?
char x[10] = {1,1,1,1,1,1,1,1,1,1};
uint32_t* y = (uint32_t*)x;
for(int i=0; i < 10; i++)std::cout << "y: " << y[i] << "\n";
output:
y: 16843009
y: 16843009
y: 257
desired output:
y: 65793
y: 65793
y: 65793
....
【问题讨论】:
-
uint32_t不够好? -
要详细说明@barakmanos 的评论,
<cstdint>中有大量固定宽度的整数类型 -
如果我从 24 位整数列表中读取 32 位整数,我的所有值都不会关闭吗?
-
@barakmanos
uint32_t存在,如果它可以有 32 位,但由于CHAR_BIT != 8而可能不是 4 字节,尽管这是一种短暂的可能性。 -
sizeof (unsigned char[4]) == 4,保证。sizeof (uint32_t) == 32 / CHAR_BIT如果uint32_t存在;如果CHAR_BIT == 8(很可能是这种情况),则为 4。