【发布时间】:2014-07-18 08:59:07
【问题描述】:
我想知道是否有更好的方法,而不是将 void 指针转换为 uint8_t,然后根据偏移量进行算术运算,然后将其转换为 uint32_t,然后取消引用以在该确切偏移量处获得 4 字节值.
void * foo = malloc(1024);
uint32_t myVar;
for(int i = 0; i < 10; i++)
{
myVar = *((uint32_t*)((uint8_t *) foo + nOffset));
nOffset += 100;
}
【问题讨论】:
-
离题:
i < 10比i> 10更有意义。 -
为了稍有改进,请使用
char而不是uint8_t。这不是您在这里关心的位宽,而是指针的元素大小。根据定义,sizeof(char)为 1。 -
@luserdroog 除非数据实际上是字符,否则使用
uint8_t更有意义。虽然在几乎所有现代平台上都没有区别,但将其作为通用uint8_t在阅读代码时会给出一些语义提示。 -
@JoachimPileborg 同意。我担心的正是这些语义暗示。它没有传达(对我)任何实际意义。我只是盯着它,想知道为什么不是
char。 -
由于代码通常具有未定义的行为,是否真的值得研究哪种未定义的行为看起来最漂亮?