我有一个 8 字节的计数器,我正在尝试增加它。我稍后想将其转换为 unsigned long long 值。但是转换后的值会抛出错误。这是一些字节序问题还是做错了?请指教。
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
#define COUNTER_LENGTH 8
typedef struct {
uint8_t data[8];
}count_t;
static void incrementCtr(count_t* count) {
int i;
for (i = sizeof(count->data) - 1; i >= 0; --i) {
if (++count->data[i] != 0) {
break;
}
}
}
int main(int argc, char *argv[]){
count_t count;
count_t *counter;
counter = &count;
memset(counter ,0,sizeof(*counter));
incrementCtr(counter);
int i;
for (i = 0; i < COUNTER_LENGTH; i++){
printf("counter->data[%d] = %02X\n", i, counter->data[i]);
}
unsigned long long aa = 0;
int m;
for(m = 0; m< COUNTER_LENGTH; m++){
aa = aa |(counter->data[m]<< m*8);
}
printf("aa = %llu\n", aa);
return 0;
}