2012-02-14 3 views
1
// Works 
    int fnamesize=0; 
    fnamesize=message[0]<<24; 
    fnamesize+=message[1]<<16; 
    fnamesize+=message[2]<<8; 
    fnamesize+=message[3]; 

    // Doesn't work 
    int fsize; 
    memcpy(&fsize,message,sizeof(int)); 

Может кто-нибудь объяснить, почему второй не работает? Память, которую я копирую, message - это char *. Когда я пытаюсь проверить значения fnamesize и fsize, например printf("fsize is %d,fnamesize is %d",fsize,fnamesize);, fsize дает неожиданное значение, но fnamesize дает ожидаемое значение.C: Копирование из массива символов в int

Мысли?

ответ

3

Это из-за endianess, что означает расположение байтов в int.

В окнах, второй способ даст вам Int, который имеет противоположный порядок байт, как это:

fsize=message[3]<<24; 
fsize+=message[2]<<16; 
fsize+=message[1]<<8; 
fsize+=message[0]; 
+0

Абсолютно верно. Написание «симулятора сетевого стека» и часть проекта работает с ntoh_ и hton_. Спасибо, что поставили меня в правильном направлении! – Joseph

+0

Рад, что я мог бы помочь :) – MByD

1

Попробуйте изменить порядок индексов массива в коде, который работает, сравните результат код, который не работает, и посмотрите термины «большой конец» и «маленький конец».

Смежные вопросы