2015-09-20 60 views
-1

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

我试过printf("%d\n", (unsigned char)strtol(str[0], NULL, 16)),但是不会在十六进制中打印出来。

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

+2

的[在C印花十六进制字符]可能重复(http://stackoverflow.com/questions/8060170/printing-hexadecimal-characters-in-c) – yelliver

回答

4

你感到困惑的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); 
} 
+0

谢谢!但是2在'%2x'中做了什么?如果我拿出来,它仍然打印相同的十六进制。 – neby

+0

这意味着使用宽度为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 

参考

+0

感谢您的!链接确实有帮助,并总是很高兴看到不同的方式来做同样的事情。另外,上面同样的问题02在'%02x'中做了什么? – neby

+0

02只是zeropadding,所以在十六进制整数少于2个字节长的情况下,例如。 9然后它会打印09 ..不是真正需要的字母字符,因为这些都在两个字节的十六进制范围内 – amdixon