c - 接受位域值的函数 arg 使用什么类型

标签 c split byte bit-fields

假设我有一个大小为 1 字节的结构,它的声明方式为

typedef struct foo
{
  uint8_t fo1:2;
  uint8_t fo2:3;
  uint8_t fo3:3;
}foo;

然后我想将 fo2 作为参数传递给函数 func_foo(fo2),但我不知道如何声明该函数,因为 fo2 实际上没有任何类型。知道该怎么做吗?感谢任何信息!

最佳答案

由于结构成员被声明为 uint8_t,因此您将在调用的函数中使用该类型。

void func_foo(uint8_t x);
...
foo my_foo = {1, 2, 3};
func_foo(my_foo.fo2);

参数也可以是任何更广泛的类型,例如intunsigned int,因为 uint8_t 可以毫无错误地转换为这些类型。

基本上,只需像对待任何其他 uint8_t 结构成员一样对待它们即可。位字段意味着它们无法保存完整范围的 8 位值,并且它将它们全部打包在内存中的单个字节中。但是当您使用这些值时,您无需担心这一点。

关于c - 接受位域值的函数 arg 使用什么类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438487/

相关文章:

c++ - 分割函数c++

Curl 在 C 中 - 不打印 html 代码

有人可以检查一下算法吗

c - <命令行> :0:11: warning: extra tokens at end of#undef directive [enabled by default]

摄氏度到华氏度与 C 中的指针

C++/阿杜伊诺 : How do I convert a string/char-array to byte?

linux - 如何用逗号而不是空格分割列表

javascript - 使用javascript正则表达式从字符串中获取除连字符和括号之外的所有字符

java - 当我分配大于字节的值时会发生什么?

python - 将 bytearray 反向移植到 Python 2.5