C memcpy проблемы с массивом без знака - PullRequest
3 голосов
/ 19 ноября 2010

У меня есть вопрос о 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?

Большое спасибо

Ответы [ 3 ]

8 голосов
/ 19 ноября 2010

Вы получаете 34120000000000000000, потому что вы находитесь в системе с прямым порядком байтов.Вы получите 12340000000000000000 в системе с прямым порядком байтов. Endianness дает полное обсуждение систем с прямым порядком байтов и порядком байтов.

2 голосов
/ 19 ноября 2010

архитектура с прямым порядком байтов / байтов?что означает, что 2 байта контрольной суммы инвертированы.

Это просто предположение, если мой ответ не верен, прокомментируйте его, и я его удалю.

1 голос
/ 19 ноября 2010

Процессоры Intel с прямым порядком байтов, они сначала хранят цифры, не говоря уже о словах

Это, очевидно, свидетельство того, что Intel не проводит внутренние тесты на наркотики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...