gpt4 book ai didi

C 将字符复制到结构

转载 作者:行者123 更新时间:2023-12-04 12:05:38 24 4
gpt4 key购买 nike

我读取了一堆输入(传感器),每个传感器都得到 0(关闭)或 1(打开)。我在一个 char* 中得到这些值,其中我有所有传感器的结果。每个传感器 1 位。

当我想在我的代码中使用这些值时,我觉得将这个结果与另一个设置了我感兴趣的一位的字符进行 AND 运算并不是一个好主意,因为代码会变得非常臃肿。

相反,我正在考虑制作一个像这样的结构:

struct sensors {
unsigned int Sensor0:1;
unsigned int Sensor1:1;
unsigned int Sensor2:1;
unsigned int Sensor3:1;
unsigned int Sensor4:1;
unsigned int Sensor5:1;
unsigned int Sensor6:1;
unsigned int Sensor7:1;
}

struct sensors s1;
memcpy(buf, (char*)&sensors, 1);

但据我所读,结构可能不会将每个组件都保存在内存中,并且可能会在它们之间插入填充和其他内容,这使得这是行不通的。

我错了吗?有没有更好的方法来做到这一点?

最佳答案

根据您当前对 struct sensors 的定义,编译器将插入额外的填充,因为 int 具有对齐要求,通常在 sizeof(int) 边界。此外,int 必须比 char 宽,因此它可以容纳 8 个以上的标志,而您不需要这些。

如果您这样声明它(使用 unsigned char 代替),则不应有填充,因为 char 具有最不严格的对齐要求:

struct sensors {
unsigned char Sensor0:1;
unsigned char Sensor1:1;
unsigned char Sensor2:1;
unsigned char Sensor3:1;
unsigned char Sensor4:1;
unsigned char Sensor5:1;
unsigned char Sensor6:1;
unsigned char Sensor7:1;
}

这可能不适用于 CHAR_BIT != 8 的非常奇怪的平台。

关于C 将字符复制到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213658/

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