以C语言打印字节,仅以十六进制打印不可打印的字符
我有一个程序创建一些字节字符串,这些字符串是人类可读文本和控制字节(包括空字节)的混合体。为了调试这些字符串,我希望有一个函数,在给定指针和大小的情况下打印这些字符串,这样我就可以读取屏幕上可打印的ASCII字符,以及不可打印字符的十六进制值(Python),例如 到目前为止,我有一个只打印可打印字符的函数:以C语言打印字节,仅以十六进制打印不可打印的字符,c,arrays,C,Arrays,我有一个程序创建一些字节字符串,这些字符串是人类可读文本和控制字节(包括空字节)的混合体。为了调试这些字符串,我希望有一个函数,在给定指针和大小的情况下打印这些字符串,这样我就可以读取屏幕上可打印的ASCII字符,以及不可打印字符的十六进制值(Python),例如 到目前为止,我有一个只打印可打印字符的函数: void print_bytes(unsigned char *bs, size_t size) { size_t i; for (i = 0; i < size;
void print_bytes(unsigned char *bs, size_t size) {
size_t i;
for (i = 0; i < size; i++) {
fputc(bs[i], stdout);
}
printf("\n");
}
void print_字节(无符号字符*bs,大小){
尺寸i;
对于(i=0;i
除此之外,我在网上只看到过将所有内容打印为十六进制序列的示例,这并不能帮助我理解字符串的内容
如何改进上述函数以打印不可打印字符的十六进制值 使用注释中的建议,我重写了函数以使用
isprint
开关:
void print_bytes(const unsigned char *bs, const size_t size) {
for (size_t i = 0; i < size; i++) {
if isprint(bs[i]) {
fputc(bs[i], stdout);
} else {
printf("\\x%02x", bs[i]);
}
}
printf("\n");
}
void print_字节(常量无符号字符*bs,常量大小\u t大小){
对于(大小i=0;i
使用注释中的建议,我重写了函数以使用isprint
开关:
void print_bytes(const unsigned char *bs, const size_t size) {
for (size_t i = 0; i < size; i++) {
if isprint(bs[i]) {
fputc(bs[i], stdout);
} else {
printf("\\x%02x", bs[i]);
}
}
printf("\n");
}
void print_字节(常量无符号字符*bs,常量大小\u t大小){
对于(大小i=0;i
如果您理解这些示例,是什么阻止您检查字符是否可打印、是否可打印并输出十六进制字符?ctype.h
提供了isprint()
宏,该宏可以简化If(isprint(c)){/*打印它*/}否则{/*输出十六进制*/}
大卫,谢谢。这就是我想要的函数类型。请回答这个问题并做标记。它有助于其他人找到答案,这些答案将隐藏在注释中,而问题仍将被列为未回答。如果您理解这些示例,是什么阻止您检查字符是否可打印,如果可以,则输出字符,如果不可以,则输出十六进制?ctype.h
提供了isprint()
if(isprint(c)){/*打印它*/}else{/*输出十六进制*/}David,谢谢。这就是我想要的函数类型。请回答这个问题并做标记。这有助于其他人找到解决方案,这些解决方案将隐藏在评论中,并且问题仍将被列为未回答。