假设我有一个C风格的
假设我有一个指针偏移量,可以指向一个以4字节整数开头的位置:
简而言之,在C语言风格的字节数组中,将四个字节转换为一个无符号整数的最干净、最有效的方法是什么?
unsigned char
类型的数组:unsigned char * c = (unsigned char *) malloc(5000 * sizeof(unsigned char));
for(int i = 0; i < 5000; i++)
c[i] = (unsigned char) ((i >> (i%4 * 8)) & 0xFF);
假设我有一个指针偏移量,可以指向一个以4字节整数开头的位置:
// pseudo code
unsigned int i = c + 10; // 10 = pointer offset, let's say.
如果我想将i
赋值为正确的数字,我可以这样做:
unsigned int i = (*(c+10) << 24) + (*(c+11) << 16) + (*(c+12) << 8) + (*(c+13));
但我难道不能使用转换来做到这一点吗?
// pseudo code -- I haven't gotten this to work yet:
int i = (unsigned int) (*((void *)(c+10));
// or maybe
int i = *((unsigned int*)((void *)(c+10)));
简而言之,在C语言风格的字节数组中,将四个字节转换为一个无符号整数的最干净、最有效的方法是什么?
unsigned char * c
不是一个数组,而是一个指针。 - David Conrad