Я новичок в знаках. Я пытаюсь преобразовать массив большого числа endian в шестнадцатеричную строку в маленьком конце. Я попытался преобразовать массив с большим эндианным целым в младшую десятичную строку. Но в конце, получив строчную кодировку с длинным десятичным десятичным символом вместо маленького endian. Пожалуйста, помогите мнепреобразовать подписанный целочисленный массив в формате big endian в hexa decimal 16 бит в little endian в c
gint16 frame[5] = {10, -26, 35, 7, -35}; //big endian
gint16 frame_i[5];
size_t i;
for (i= 0; i < 5; i++) {
frame_i[i] = (frame[i] << 8) | ((frame[i] >> 8) & 0xFF); //big endian to little endian
}
char *str = malloc(5 * 4 + 1);
size_t j;
for (j= 0; j < 5; j++) {
snprintf(str + j * 4, 5, "%04X", frame_i[j] & 0xFFFF); // getting big endian instead of little endian
}
Я не могу себе представить, зачем нужна строка с маленьким шрифтом. Текстовые представления чисел всегда равны m.s. сначала цифра. Endianness не имеет никакого отношения к тому, как организованы массивы: проблема заключается в последовательности байтов в памяти, что многобайтовое значение естественно хранится процессором. Прочитайте [end about] (https://en.wikipedia.org/wiki/Endianness). –
Кроме того, эта строка '(frame_i [i] << 8) | ((frame_i [i] >> 8) & 0xFF); 'не имеет никакого эффекта - значение выражения не назначается. –
Пожалуйста, опубликуйте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), который позволит избежать глупых ошибок в вопросе, оставляя сомнение в том, что может быть больше ошибок транскрипции. –