gpt4 book ai didi

c++ - 保证数据类型大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:05 25 4
gpt4 key购买 nike

是否有正确或常规的方法来保证数据类型为 sizeof 4?

之前我刚刚做了一些基于sizeof不同数据类型的typedef语句,我想知道是否有更好或更传统的方法让数据类型在不同的架构上具有预先确定的大小?

为了这个问题,假设我有一大堆从文件中读取的字符。我想从这个 char 数组中读取一系列 24 位整数。过去,我将数组转换为具有所需数据类型大小的数据类型,但如果没有具有所需大小的原始数据类型,则此方法将失败。

处理这种情况的最佳方法是什么?

  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 read24(unsigned char *& bufp)
{
uint32_t val;
val = *bufp++;
val |= *bufp++ << 8;
val |= *bufp++ << 16;
return val;
}

用法:

unsigned char buffer[] = 
{ 0x2A, 0x00, 0x00, 0x9A, 0x02, 0x00, 0x4E, 0x61, 0xBC };
unsigned char * bufp = buffer;
uint32_t A = read24(bufp);
uint32_t B = read24(bufp);
uint32_t C = read24(bufp);

为什么是 unsigned char?处理符号扩展的最简单方法。如果您使用带符号的 char,则必须像这样进行屏蔽:

val = *bufp++ & 0xFF;

去除多余的符号位。

注意字节序。根据数据的来源,您可能需要从另一个方向阅读所有内容。

关于c++ - 保证数据类型大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30764303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com