當memcpy遇到大小端問題

2021-08-08 15:14:01 字數 880 閱讀 5867

經常看到memcpy的原始碼都是針對char型做處理,當遇到short int 和char同時作為引數時,就得不到想要的結果,都是大小端惹的禍。

#include #include #include void *first_memcpy(void *dest,void *src, unsigned int count)

return dest;

}void *second_memcpy(void *dest,void *src, unsigned int count)

return dest;

}void main()

; unsigned char src[13]=;

memcpy(des,src,4);

printf("1 memcpy:\n");

for(i=0;i<4;i++)

printf("\n");

first_memcpy(des,src,4);

printf("1 first_memcpy:\n");

for(i=0;i<4;i++)

printf("\n");

second_memcpy(des,src,4);

printf("1 second_memcpy:\n");

for(i=0;i<4;i++)

printf("\n");

}

執行結果:

1 memcpy:

3412,7856,0000,0000,

1 first_memcpy:

3412,7856,0000,0000,

1 second_memcpy:

1234,5678,0000,0000,

最後一種情況才是我們想要的!

大小端問題

對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...

大小端問題

大小端問題 跨位元組位域大小端轉換例項講解 注 結構體整體當做u16 u32來賦值時才會產生這種問題,如果是按位元組或者移位方式訪問則沒有問題 typedef struct s bit sample 測試程式 vos void bigendiandomainfiledtest vos void 1 ...

大小端問題

大小端問題 最近工作中,有兩次遇到大小端問題,所以花時間寫這篇日誌,總結一下。1.實際需求 1 前段時間寫了乙個修復損壞的gzip檔案的tool,在linux server上編譯執行沒有問題。但是在solaris server上運編譯執行,結果總是和預期的不一致,跟蹤發現是由大小端問題導致的 2 最...