Выражение:
*(mem_start + j)
или более обычное
mem_start[j]
является операцией «чтения», когда она используется, скажем, направая часть присваивания или как параметр в вызове функции.
Итак, вместо вашей собственной строки кода:
buff[j] = *(mem_start + j); // I'm assuming 'buff[i]' was a typo
, которая считывает из одной ячейки памяти в другую,Вы можете сделать что-то вроде:
printf("%hhx", mem_start[j]);
, который будет считывать байт из mem_start
со смещением j
и выводить его в stdout
как шестнадцатеричное представление значения байта.Поместите это в цикл (как у вас уже есть), и вы будете эффективно читать из памяти, без копирования того, что вы читаете, во второй буфер.
На основании некоторых ваших комментариев,Я предполагаю, что отображение содержимого памяти на экране будет соответствовать вашим потребностям.И исходя из того, что вы говорите, память, которую вы хотите отобразить, будет, я предполагаю, что шестнадцатеричный вывод подходит.Но есть и другие варианты, такие как чтение из исходного буфера памяти в файл или вывод необработанных байтовых значений (вместо представления этих значений) и т. Д.
Обратите внимание, что не каждая комбинация ввода и выводаполезно, хотя.Вывод необработанных байтовых значений на экран терминала может привести к менее чем полезным результатам, и в зависимости от того, что вы хотите делать с считанными данными, файл, заполненный шестнадцатеричным представлением исходных байтов, также может оказаться бесполезным.Выберите выходной пункт назначения и выходной формат в соответствии с вашими потребностями.