格式化真麻烦,特别是中间那个补空格。。WA了一次,搜别人代码才知道,前面那个地址是16进制,而sample里才0010,0020,0030,没有出现16进制字符,我以为每次加10.。。测试数据肯定有大地址的,用10进制表示肯定WA。对汇编的地址表示不熟啊。。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int changeChar(int c)
{
if (islower(c))
return toupper(c);
else if (isupper(c))
return tolower(c);
else
return c;
}
int main()
{
char s[4096];
while (gets(s) != NULL)
{
int i = 0, k, row = 0, len = strlen(s);
while (i + 16 < len)
{
printf("%04x: ", row);
for (k = i; k < i + 16; k += 2)
printf("%x%x ", s[k], s[k + 1]);
for (k = i; k < i + 16; k++)
printf("%c", changeChar(s[k]));
printf("\n");
i += 16;
row += 16;
}
printf("%04x: ", row);
for (k = i; k < len; k++)
{
printf("%x", s[k]);
printf(k % 2 != 0 ? " " : "");
}
int spaces = (i + 16 - len) / 2 * 5;
spaces = (i + 16 - len) % 2 != 0 ? spaces + 3 : spaces;
for (k = 0; k < spaces; k++)
printf(" ");
for (k = i; k < len; k++)
printf("%c", changeChar(s[k]));
printf("\n");
}
return 0;
}