Ведущие нули C - PullRequest
       31

Ведущие нули C

1 голос
/ 16 декабря 2011

Я пытаюсь прочитать адреса памяти из / proc // maps и использую следующий код

for (ptr = NULL; getline(&ptr, &n, file) > 0;)     {
   if (ptr[0]== ' ') { continue; }
   sscanf(ptr, "%lx-%lx", &r0, &r1);
   printf("r0: %lx, r1: %lx\n", r0, r1);           }

Предположим, что файл указывает на / proc // maps & ptr - указатель строки. Но когда вы рассматриваете файл карт, он не читает сам файл. Он сбрасывает ноль, он не поднимает нули. Итак рассмотрим:

00110000-00123000 r-xp 00000000 08:01 129925     /lib/i686/cmov/libnsl-2.11.1.so

После запуска моей программы:

r0: 110000, r1: 123000

Как сохранить ведущие нули для вывода что-то вроде этого:

r0: 00110000, r1: 00123000

Редактировать: printf для отладки.

Вот что я делаю с r1 позже

mem = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE, mem_fd, r1)

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Вы читаете эти значения в целые числа;целые числа не имеют начальных нулей.

Если вы знаете, сколько цифр вы хотите добавить к длине, вы можете указать это в строке формата:

printf("r0: %08lx, r1: %08lx\n", r0, r1);

Нет никакого способахранить и вызывать точное количество начальных нулей без сохранения значения в другом формате (например, в строке).

1 голос
/ 16 декабря 2011

Используйте флаг 0 (который указывает начальные нули), за которым следует длина дополнения.

printf("r0: %08lx, r1: %08lx\n", r0, r1);
             ^^         ^^

Эта ссылка является хорошим справочным материалом.

...