如何获取十六进制≤0x20的ASCII字符字节编码?C字符串插入0x18方法
在C字符串中插入0x18控制字符的实现方法
直接在字符串字面量中插入
C语言支持十六进制转义序列,你可以直接用\x18在字符串的指定位置插入0x18字符,示例代码:
#include <stdio.h> int main() { char str[] = "前缀\x18后缀"; // 以十六进制打印验证字符编码 for (int i = 0; str[i] != '\0'; i++) { printf("%02X ", (unsigned char)str[i]); } return 0; }
运行后会输出对应字符的十六进制值,其中会包含18,说明0x18已成功插入。
手动在字符数组指定位置插入
如果需要动态在已有的字符串中插入0x18,可以通过内存移动+赋值的方式实现,示例:
#include <stdio.h> #include <string.h> int main() { char str[50] = "原有字符串内容"; int insert_pos = 4; // 要插入的位置索引(从0开始) // 将插入位置及之后的字符向后移动1位,留出空间 memmove(str + insert_pos + 1, str + insert_pos, strlen(str) - insert_pos + 1); // 赋值0x18 str[insert_pos] = 0x18; // 验证输出 for (int i = 0; str[i] != '\0'; i++) { printf("%02X ", (unsigned char)str[i]); } return 0; }
这里用memmove而非strcpy,是因为它能安全处理内存重叠的情况。
处理输入字符串的插入场景
如果是从用户输入的字符串中插入0x18,需要先获取输入,再调整内存空间后插入,示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *input_str = NULL; size_t buf_len = 0; // 获取用户输入(包含空格) printf("请输入字符串:"); getline(&input_str, &buf_len, stdin); // 去除输入末尾的换行符 input_str[strcspn(input_str, "\n")] = '\0'; int insert_pos = 3; // 指定插入位置 // 重新分配内存,多预留1个字节给0x18 char *new_str = realloc(input_str, strlen(input_str) + 2); if (!new_str) { free(input_str); return 1; } input_str = new_str; // 后移字符并插入0x18 memmove(input_str + insert_pos + 1, input_str + insert_pos, strlen(input_str) - insert_pos + 1); input_str[insert_pos] = 0x18; // 验证输出 printf("插入后的十六进制编码:"); for (int i = 0; input_str[i] != '\0'; i++) { printf("%02X ", (unsigned char)input_str[i]); } free(input_str); return 0; }
注意:HTML转义字符对C字符串无效,那是用于HTML文档的转义规则;无需借助汇编指令,C语言本身就提供了直接处理控制字符的语法和工具函数。
内容的提问来源于stack exchange,提问作者user20332975
相关产品推荐
相关产品推荐

