我有一个名为char **str
(由malloc分配)的二维数组。可以说str [0]的字符串是“hello”。我将如何打印该十六进制?以十六进制打印字符数组C
我试过printf("%d\n", (unsigned char)strtol(str[0], NULL, 16))
,但是不会在十六进制中打印出来。
任何帮助将不胜感激,谢谢!
我有一个名为char **str
(由malloc分配)的二维数组。可以说str [0]的字符串是“hello”。我将如何打印该十六进制?以十六进制打印字符数组C
我试过printf("%d\n", (unsigned char)strtol(str[0], NULL, 16))
,但是不会在十六进制中打印出来。
任何帮助将不胜感激,谢谢!
你感到困惑的strtol
的fuctionality。如果您有代表十六进制数字的字符串,你可以使用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);
}
谢谢!但是2在'%2x'中做了什么?如果我拿出来,它仍然打印相同的十六进制。 – neby
这意味着使用宽度为2来打印数字。它应该是'%02x',因此如果数字小于16,它就会打印出前导零。 –
用%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
参考
的[在C印花十六进制字符]可能重复(http://stackoverflow.com/questions/8060170/printing-hexadecimal-characters-in-c) – yelliver