C语言中是否有将字符转换为十六进制的函数?

5
我有一个char数组,其中包含来自文本文件的数据,我需要将其转换为十六进制格式。C语言中是否有这样的函数?
谢谢您提前的帮助!

2
你能更明确一些吗?文件中的数字是使用十进制还是十六进制表示的?你想对这些数字进行什么操作——将它们转换为可用的整数,还是将它们从一种进制翻译成另一种进制?“十六进制”在内部格式上真的没有意义——那只是你可以用来可视化内部二进制表示的几种格式之一。 - tvanfosson
@geOrge007:你得到了各种答案,因为问题含糊不清。我支持tvanfosson的评论,并建议您提供一两个示例,说明数据的格式及您想要转换的方式。 - mjv
抱歉,大家,我自己也有点困惑,所以我不是很清楚。 问题在于... 我对密码学非常新手,现在我必须制作一个密码管理器作为练习。因此,我告诉的字符数组基本上是包含用户名和密码的文本文件的内容。我将使用AES算法加密文件,并有人告诉我,我必须将字符数组的内容转换为十六进制格式。由于我以前没有做过这样的事情,所以我认为它会像这样:http://www.string-functions.com/string-hex.aspx - VGe0rge
这是我正在使用的AES实现,如果有人问的话,可以在这个链接上找到:http://www.gzsec.com/filesys/news_view.asp?newsid=234再次感谢:D - VGe0rge
3个回答

5
如果我正确理解了问题(不保证),您有一个表示十进制格式的文本字符串(“1234”),您想将其转换为十六进制格式的字符串(“4d2”)。
假设这是正确的,您最好使用`sscanf()`或`strtol()`将输入字符串转换为整数,然后使用`sprintf()`和`%x`转换说明符将hex版本写入另一个字符串。
char text[] = "1234";
char result[SIZE]; // where SIZE is big enough to hold any converted value
int val;

val = (int) strtol(text, NULL, 0); // error checking omitted for brevity
sprintf(result, "%x", val);

如果您提供了很好的替代解释和合理的答案,则会给予+1分。 - EvilTeach

4
我认为您希望能够显示数组中单个字节的十六进制值,有点像转储命令的输出。以下是一种显示该数组中一个字节的方法。 要保证输出的宽度一致,需要在格式上加前导零。 您可以使用大写或小写的X来获得相应大小写的表示形式。 我建议将它们视为无符号的,以避免对符号位产生困惑。
unsigned char c = 0x41;
printf("%02X", c);

1
问题指定了“我有一个包含文本文件数据的字符数组”。在C语言中,一个字符数组通常是来自文本文件的C字符串。 - mctylr

2
你可以使用 atoisprintf / snprintf。以下是一个简单的示例。
char* c = "23";
int number = atoi(c);
snprintf( buf, sizeof(buf), "%x", number );

'atoi()'函数是做什么的?如果c是'char c;'(通常情况下,当它不是'int c;'时,适用于从'getc()'等进行I / O),则代码不会编译。 - Jonathan Leffler
从原始问题中可以看出,"我有一个char数组",所以c是指向字符的char*指针。我会让它更清晰明了。谢谢。 - mctylr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接