我有一个关于memcpy的问题,希望有人能回答。这是一个简短的示范程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main (int argc, char **argv){
unsigned char buffer[10];
unsigned short checksum = 0x1234;
int i;
memset(buffer, 0x00, 10);
memcpy(buffer, (const unsigned char*)&checksum, 2);
for(i = 0; i < 10; i ++){
printf("%02x",buffer[i]);
}
printf("\n");
return 0;
}
当我运行这个程序时,我得到34120000000000000000 我的问题是为什么我得不到12340000000000000000?
非常感谢
答案 0 :(得分:8)
你得到34120000000000000000,因为你是一个小端系统。您将在big-endian系统上获得12340000000000000000。 Endianness对大端与小端系统进行了全面讨论。
答案 1 :(得分:2)
little endian / big endian架构? 这意味着2字节的校验和被反转。
这只是一个猜测,如果我的答案不正确评论它我会删除它。
答案 2 :(得分:1)
英特尔的CPU是小端的,它们首先存储数字
这显然是英特尔不进行内部药物测试的证据。