c - 将循环计数器字符串化以引用 C 结构体的成员

标签 c struct stringification

我有两个结构,如下所示:

typedef unsigned char byte;

struct my_struct_2 {
int type;
int length; //will be 2 in this case
byte value1; //MSB
byte value2; //LSB
}

struct my_struct_4 {
int type;
int length; //will be 4 in this case
byte value1; //MSB
byte value2;
byte value3;
byte value4; //LSB
}

我想根据“长度”循环遍历结构中的“值”成员,将字节值连接成一个数字。我想知道是否可以使用某种字符串化,以便我可以构造一个具有与此类似的结构的 for 循环:

int value = 0;
for( int i = 1; i <= length; i++)
{
    value = value << 8;
    value = value & my_struct.value#i#;
}

我想利用结构成员按顺序命名的事实。

我知道我可以通过使用指向第一个值的指针并递增指针来完成此任务。我正在尝试让自己更熟悉字符串化,因此请不要使用类似指针的解决方案。谢谢!

最佳答案

没有办法通过构造这样的名称来循环结构字段。一旦 C 程序被编译,任何有关名称的信息都会消失(忽略调试器的信息);所有偏移量都硬编码到机器代码中。

有一些C preprocessor abuse你可以得到一些有点像在名称上循环的东西,但它并不漂亮,而且绝对不推荐,除非你只是为了挑战而这样做。

关于c - 将循环计数器字符串化以引用 C 结构体的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399731/

相关文章:

c - c中舍入函数的实现

c - c语言中的字符串

C memcpy 字节缓冲区到打包结构,好的决定吗?

c++ - 将结构从 C++ dll 返回到 Python

include - #include 指令中的宏替换

c++ - 字符串化 - 它是如何工作的?

c - 选项卡控件上的闪烁 - WIN32

swift - 通过相同的结构从不同的 API 获取数据?

c - C 中的 token 粘贴

C: gets() 跳过第一个输入