我有一个如下数组,
RandomAccessIndexType
我想像这样打印,
#define BASE_ADDRESSES 10
int register_values[BASE_ADDRESSES] = {23, 12, 54, 16, 32, 44, 11, 38, 35, 52};
但它需要行格式化以及列格式化,请提供Base_Address Hex_Values ASCII_Values
------------ ----------- -------------
0x0000 17 0C 36 ')' '6' '*'
0x0003 10 20 2C ' ' ',' '$'
0x0006 0B 26 23 '~' '&' '#'
0x0009 34 '4'
格式来有效地执行此操作..
注意:ASCII值不正确,例如.. 提前致谢
答案 0 :(得分:1)
没有printf
格式适合您的常规行和结束行。你必须逐个构造输出。您还应该在角色输出中满足不可打印的字符和字符的特殊表示,例如'\n'
。
这是一个dump
例程,用于将输出格式化为col
列:
#include <stdlib.h>
#include <stdio.h>
static const char *special(int c)
{
switch(c) {
case '\0': return "'\\0'";
case '\a': return "'\\a'";
case '\b': return "'\\b'";
case '\n': return "'\\n'";
case '\r': return "'\\r'";
case '\t': return "'\\t'";
case '\v': return "'\\v'";
case '\'': return "'\\''";
case '\\': return "'\\\\'";
}
return NULL;
}
static int unprintable(int c)
{
return c < 32 || c > 126;
}
void dump(int arr[], size_t n, size_t col)
{
size_t base = 0;
while (n) {
printf("%08zx ", base);
for (size_t i = 0; i < col; i++) {
if (i < n) {
printf("%02x ", arr[i]);
} else {
fputs(" ", stdout);
}
}
printf(" ");
for (size_t i = 0; i < col; i++) {
if (i < n) {
const char *p = special(arr[i]);
if (p) {
printf("%-5s", p);
} else if (unprintable(arr[i])) {
printf("0%03o ", arr[i]);
} else {
printf("'%c' ", arr[i]);
}
}
}
printf("\n");
arr += col;
n = (n < col) ? 0: n - col;
base += col;
}
}
并称之为:
int main()
{
int val[] = {23, 12, 54, 16, 32, 44, 11, 38, 35, 52};
dump(val, 10, 3);
return 0;
}