c语言字符串转16进制及16进制转字符串

本文详细介绍了C语言中如何将字符串转换为16进制以及16进制转换回字符串的方法。通过使用`sprintf`函数进行格式化输出,将每个字符转化为16进制字符串,并通过`hexcharToInt`函数解析16进制字符为数字,进而还原为原始字符。示例代码展示了具体实现过程,包括字符串到16进制的`bin2hex`函数和16进制到字符串的`hex2bin`函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般来说,加密解密的时候,密钥的生成可能包含一些特殊的不可见字符,为了方便保存,我们可以将字符转化成16进制
c语言中如何将字符串转化成16进制,主要用一下函数

一:字符串转16进制

sprintf((char*)(hex + j), “%02X”, bin[i]);即将一个字符按照%02X格式即16进制输出

void bin2hex(unsigned char *bin,char *hex,int binlength) {
	int i = 0;
	int j = 0;
	for (i = 0,j = 0; i < binlength; i++, j += 2) {
		sprintf((char*)(hex + j), "%02X", bin[i]);
		printf(""+i);
	}
}

我们知道,字符串转16进制按照一个字符用两个16进制的数字标识,所以原始字符串长度是n,16进制字符串就是2n,示例如下:

char *source="abc";
char hexstr[2*strlen(source)];
bin2hex(source,hexstr,strlen(source))

二:16进制转字符串
这里重点是将两个16进制转成一个字符(hexcharToInt(hex[i]) << 4)| hexcharToInt(hex[i + 1]);第一个16进制字符先转数字然后前移4位拼接第二个16进制字符同样转数字,然后强制转化成char字符。

int hexcharToInt(char c)
{
	if (c >= '0' && c <= '9') return (c - '0');
	if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
	if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
	return 0;
}
//
void hex2bin(unsigned char *bin, char *hex, int binlength) {
	int i = 0;
	for (i = 0; i < strlen(hex); i += 2) {
		bin[i / 2] = (char)((hexcharToInt(hex[i]) << 4)
			| hexcharToInt(hex[i + 1]));
	}
}

16进制字符串转普通字符串,即两个16进制数转成一个字符,长度减半。
调用如下:

char *hexstr="13f2a4";
char *comstr[strlen(hexstr)/2];
hex2bin(comstr,hexstr,strlen(hexstr));
### C语言字符串换为16进制数组 在C语言中,可以编写一个函数来处理给定的字符串并将其换为相应的16进制数值表示形式。下面是一个具体的例子,展示了如何实现这一功能: ```c #include <stdio.h> #include <stdlib.h> // 函数用于将两个字符组成的十六进制化为十进制整数 unsigned char hexCharToInt(char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'A' && c <= 'F') return c - 'A' + 10; if (c >= 'a' && c <= 'f') return c - 'a' + 10; return 0; // 如果不是合法的十六进制字符,则返回0 } void stringToHex(const char* str, unsigned char* result) { int i = 0; while (*str != '\0') { // 假设输入字符串中的每一对连续字符代表一个字节 *result++ = (hexCharToInt(*str++) << 4 | hexCharToInt(*str++)); ++i; } } ``` 上述代码定义了一个`stringToHex`函数,该函数接收源字符串和目标缓冲区指针作为参数[^1]。 为了验证此方法的有效性以及更好地理解其工作原理,这里提供一段测试代码片段: ```c int main() { const char input[] = "deadbeef"; // 输入的ASCII编码下的十六进制字符串 size_t length = sizeof(input)/sizeof(input[0]) / 2 - 1; // 计算实际长度(减去结尾符) unsigned char output[length]; stringToHex(input, output); printf("Original String: %s\n", input); printf("Converted Hex Array:"); for(int i=0;i<length;++i){ printf(" %02X",output[i]); } putchar('\n'); return 0; } ``` 这段程序会打印原始字符串及其对应的16进制数组表示形式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值