如何在C中按字节数转换?

时间:2013-10-21 17:40:09

标签: c memory-management

我有这个结构:

t_scene *scene

我把它投在无效*

void *base = (void *)scene;

手动移动到某个字段(出于某些原因,需要手动移动它)

void *param = base + sizeof(int);

现在,如果我想取消引用它,我需要在int *中转换param:

*(int *)param = 12;

我有办法用字节值来解除折射吗? 这样的事情:

*(sizeof(int)*)param = 12;

提前感谢!

2 个答案:

答案 0 :(得分:1)

我想你问的是如何访问结构中的特定字节。 Typecast指向数组的指针,然后将其作为数组访问。例如:

unsigned char *byteArray = (unsigned char *)scene;
byteArray[4] = 12;  //sets the fifth byte (offsets start at 0) to 12.

答案 1 :(得分:1)

我建议您使用位屏蔽而不是使用潜在的UB。例如,如果t_scene是32位类型:

uint8_t lower_byte = scene & 0xff;
...
uint8_t high_byte = (scene >> 24) & 0xff;