Char, приведенный к int в C, возвращает отрицательное значение - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю над заданием, и кроме этого мне нужно преобразовать целые числа (их источником является текстовый документ в массив, а затем записать его в другой файл в виде двоичного файла. Я создал массив, в котором хранятся все данные (назначение предложило сделать это.) Я преобразовал числа с помощью функции atoi, они отлично конвертировались. Я вставляю эти числа в массив, используя сдвиг битов:

arr[index] = (integer >> 16) && 0xFF;
arr[index+1] = (integer >> 8) && 0xFF;
arr[index+2] = integer && 0xFF;

, но когда я пытаясь вытащить числа обратно (я тестирую метод):

integer = 0;
integer |= (arr[index]<<16);
integer |= (arr[index+1]<<8);
integer |= (arr[index+2]);

например, я сделал это с номером 76234. Это представление памяти (в массиве char) было: 1,41,-54

после запуска приведенного выше кода для его преобразования он вернул странный результат в integer: -54. Я провел некоторую отладку в gdb, и все отлично работало до третьей строки обратного преобразования:

(gdb) p /t (arr[23])
$4 = 11001010
(gdb) p /t (int)(arr[23])
$5 = 11111111111111111111111111001010

Итак, при приведении из char-> int он возвращает -54, что приводит к странным результатам. Есть ли способ получить «реальное» значение в этом байте, а не отрицательное о нэ? или есть лучший способ для хранения данных (это какой-то ассемблер для воображаемого 24-битного процессора, поэтому я должен хранить его в 24-байтовых блоках, которые составляют 3 байта, то есть один символ, так что он кажется лучшим решение для меня)? Спасибо

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