Хранение данных в памяти компьютера

223
20 августа 2021, 17:10

Есть некий код, который записывает данные в память.

Допустим, ему передали указатель на начало блока памяти, - void *, - и числовое значения для записи - data. Указатель преобразуется в тип int, и записывается разность data - val.

void write(void *addr, int data = 1024) {
    *((int*) addr) = data - 18;
}

Для проверки корректности функционирования программы, копирую каждый байт блока памяти в файл, а после изучаю его.

for (std::size_t i = 0; i < size; i++) 
    fout << std::hex << ((int) *((char*) addr + i));

Особенность в том, что, например, результат выражения 1024 - 18 выглядит в файле так: ffffffee, 3, 0, 0, а должно: ee, 3, 0, 0.

Почему возникает эта странность? Как байт может хранить такое большое число?

Answer 1

Вы преобразуете байт в int:

(int) *((char*) addr + i)

Соответственно, cout выводит знаковое значение типа int, получая его из ee. У вас имеется значение 238, которое - в знаковом представлении байта - отрицательное (знаковый бит равен 1). Вот этот бит знака и распространяется при преобразовании в int.

Попробуйте

fout << hex << setw(2) << setfill('0') << (unsigned int)(*((unsigned char*) addr + i));
Answer 2

Не нужно приводить к int, приводите к unsigned char

READ ALSO
Remote control session lock state

Remote control session lock state

Для того чтобы понять что сессия заблокирована (CTRL+ALT+DEL -> Lock) используется следующий кусок кода:

272
Как правильно добавлять класс active?

Как правильно добавлять класс active?

Помогите пожалуйста! Какое условие нужно задать чтобы при клике на следующую карточку предыдущая закрывалась?

315
Не отображается табличка в HtmlTextView

Не отображается табличка в HtmlTextView

Пишу таблицы для своего приложение с помощью сайта быстрого перевода текста в HTML текст отображается без ошибок но вот на месте таблички стоит...

131
проверка условия данных input

проверка условия данных input

Может баян, но не нашёл для jspЕсть выпадающий список select, есть input type='number' и кнопка type='submit'

171