C语言,ASCII字符串与16进制相互转换,给出代码
时间: 2024-12-08 08:19:48 浏览: 81
C语言数字ASCII转换成16进制互转.c
5星 · 资源好评率100%
在C语言中,ASCII字符串通常是由一系列7位ASCII码组成,每个字符对应一个0到127之间的整数。而16进制是一种逢16进1的计数系统,用于表示二进制数据。如果你需要将ASCII字符串转换为16进制并反向操作,可以借助一些库函数如`itoa()`和`strtol()`。
以下是将ASCII字符串转换为16进制的基本步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
// 将ASCII字符转为16进制字符
char hex_char(uint8_t num) {
return (num <= 9) ? ('0' + num) : ('A' + num - 10);
}
// ASCII字符串转16进制
void ascii_to_hex(const char* str, char* hex) {
for(int i = 0; str[i]; ++i) {
uint8_t val = str[i];
if(val == '\0') break;
hex[i * 2] = hex_char(val >> 4);
hex[i * 2 + 1] = hex_char(val & 0x0F);
}
hex[i * 2] = '\0'; // 结束符
}
int main() {
char input[] = "Hello, World!";
char output[32]; // 假设输入最多32字节
ascii_to_hex(input, output);
printf("ASCII to Hex: %s\n", output);
// 反向转换示例仅适用于固定长度的情况
char binary[64];
for(int i = 0; i < strlen(output); i += 2) {
binary[i] = hex_char(strtol(output + i, NULL, 16) >> 4);
binary[i + 1] = hex_char(strtol(output + i, NULL, 16) & 0x0F);
}
binary[strlen(binary)] = '\0';
printf("Hex to ASCII: %s\n", binary);
return 0;
}
```
在这个例子中,`ascii_to_hex`函数将ASCII字符串转换为16进制,然后在`main`中演示了如何从16进制回溯到二进制,但这并不完全等同于原始的ASCII字符串,因为16进制并不能精确地还原出ASCII编码。
阅读全文