Я пробовал свой мозг последние несколько часов, но мне нужна помощь. В значительной степени пытаюсь написать модель C для блокирующего кеша, который будет использоваться в проекте RTL. Я определил строку кэша в C как массив типов «char», чтобы сделать его байтовым адресом. Только трудность заключается в том, что я не могу для жизни меня фигурировать, как объединить четыре байта (символы) в 32-битный 'int' тип, который будет возвращен. Я пробовал все, что мог придумать, используя strcat, strncat, strcpy и т. Д., Но не повезло. strcat возвращает правильное значение, когда я массив символов заполняется фактическими символами, но он не ведет себя так, как требуется, когда используются числа (strcat возвращает только первый элемент, а не весь массив символов). Пример кода:конкатенировать символ до типа int
unsigned char aa[4] = {0};
char testet[2] = {1,0};
printf(" aa[0] = %d \n", aa[0]);
printf(" aa[1] = %d \n", aa[1]);
printf(" aa[2] = %d \n", aa[2]);
printf(" aa[3] = %d \n", aa[3]);
printf(" aaconcat as a 32b word is %u \n", *strncat(aa, testet,2));
printf(" aaconcat as a 32b word is %u \n", *strncat(aa, testet,1));
printf(" aa[0] = %d \n", aa[0]);
printf(" aa[1] = %d \n", aa[1]);
printf(" aa[2] = %d \n", aa[2]);
printf(" aa[3] = %d \n", aa[3]);
Возвращает:
aaconcat as a 32b word is 1
aaconcat as a 32b word is 1
aa[0] = 1
aa[1] = 2
aa[2] = 1
aa[3] = 0
Хотя я ожидал {testet [0], testet [1], testet [0]} = 131330.
Почему вы ожидаете, что выход? – user1167662
будет 131330 эквивалентно «конкатенации» символа 'char' со значениями 2, 1 и 2? – user1167662
0x0010201 - 66049 в десятичной системе – 2013-04-22 03:35:53