2011-12-16 87 views
1

我试图读取存储器地址从/ proc //地图和我使用下面的代码保持前导零ç

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 //映射& PTR是行指针。但是当你考虑一个地图文件时,它不会读取适当的文件。它降低零点,它不会选择零点。所以考虑:

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

通过我的程序运行后:

r0: 110000, r1: 123000 

我如何保持前导零输出是这样的:

r0: 00110000, r1: 0

编辑:printf的是进行调试。

这是我做的R1以后

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

您是否需要r0和r1作为数字 - 也许您可以将数据视为字符串 – Mark 2011-12-16 19:14:22

+2

这看起来像Python伪装成C :) – pmg 2011-12-16 19:22:43

回答

1

使用0标志(指定前导零),其次是填充长度。

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

This link是一个很好的参考一下。

2

你正在读取这些值为整数;整数不具有前导零。

如果你知道你有多少个数字要垫出的长度,你可以指定你的格式字符串:

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

有没有办法来存储和调用前导零的确切数量,而不存储尽管如此,不同格式的值(例如,一个字符串)。