在C中将字符数组打印为十六进制

Posted

技术标签:

【中文标题】在C中将字符数组打印为十六进制【英文标题】:Print character array as hex in C 【发布时间】:2015-12-16 23:32:29 【问题描述】:

我有一个名为 char **str 的二维数组(由 malloc 分配)。假设 str[0] 有字符串“hello”。我将如何打印该十六进制?

我试过printf("%d\n", (unsigned char)strtol(str[0], NULL, 16)),但它并没有以十六进制打印出来。

任何帮助将不胜感激,谢谢!

【问题讨论】:

Printing hexadecimal characters in C的可能重复 【参考方案1】:

您对strtol 的功能感到困惑。如果你有一个代表十六进制数字的字符串,你可以像你一样使用strtol

char s[] = "ff2d";
int n = strtol(s, NULL, 16);
printf("Number: %d\n", n);

当您尝试以十六进制打印字符串的字符时,请为字符串的每个字符使用%x 格式说明符。

char s[] = "Hello";
char* cp = s;
for ( ; *cp != '\0'; ++cp )

   printf("%02x", *cp);

【讨论】:

谢谢!但是%2x 中的 2 做了什么?如果我把它拿出来,它仍然会打印相同的十六进制。 表示使用宽度2来打印数字。它应该真的是%02x,这样如果数字小于 16,它就会打印一个前导零。【参考方案2】:

使用 %x 标志打印十六进制整数

example.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) 

  char *string = "hello", *cursor;
  cursor = string;
  printf("string: %s\nhex: ", string);
  while(*cursor)
  
    printf("%02x", *cursor);
    ++cursor;
  
  printf("\n");
  return 0;

输出

$ ./example 
string: hello
hex: 68656c6c6f

参考

printf reference ascii table

【讨论】:

也谢谢您!这些链接真的很有帮助,而且总是很高兴看到做同样事情的不同方法。另外,上面的相同问题 02 在%02x 中做了什么? 02 只是补零,因此如果十六进制整数的长度小于 2 个字节,例如。 9 然后它会打印 09.. 字母字符并不是真正需要的,因为它们都在两个字节的十六进制范围内 你能解释一下 cursor 的事情吗?此外,除非您将 *string 更改为 string[],否则这会给您带来编译器错误。

以上是关于在C中将字符数组打印为十六进制的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中将十六进制字符串转换为二进制字符串?

如何在C中将无符号字符数组转换为十六进制字符串

如何在 C++ 中将字节数组转换为十六进制字符串?

在 C 代码中将 char 数组元素转换为等效的十六进制

如何在 Visual C++ 中将字节数组转换为十六进制字符串?

如何在 PostgreSQL / pgAdmin III 中将 bytea 数据打印为十六进制字符串?