有没有办法获取 ascii 的值的名称。
例如
0x08 或只有 8 是退格键
我可以在 c 或 c++ 中获得名称“Backspace”吗?
简而言之,没有。不过,很容易解决。
如果您的 ASCII 代码 < 32,这里是您可以使用的标准 ASCII 控制字符缩写表:
char *ascii_cc[] = {
"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
"BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI",
"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB",
"CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US" };
char
然后只需按您感兴趣的值索引该字符串数组即可。例如
char c = 8; /* backspace */
printf("ASCII control code = %s\n", ascii_cc[c]);
其中只有 128 个(最后 128 个不同,取决于您使用的代码页),为什么不创建一个 const 数组?如果您将数据范围缩小到不可打印的字符,则项目数将降至 32。
您可以在Wikipedia上找到完整列表。
以下是前 32 个值:
十二月缩写名称 0 NUL 空字符 1 SOH 标头开头 2 STX 文本开头 3 ETX 文本结尾 4 EOT 传输结束 5 ENQ查询 6 ACK 确认 7 贝尔贝尔 8 BS 退格[d][e] 9 HT 水平制表符[f] 10 LF 换行 11 VT 垂直标签 12 FF 换页 13 CR 回车[g] 14 SO移出 15 SI 移入 16 DLE 数据链路逃逸 17 DC1 设备控制 1(通常为 XON) 18 DC2 设备控制 2 19 DC3 设备控制 3(通常为 XOFF) 20 DC4 设备控制 4 21 NAK 否定确认 22 SYN 同步空闲 23 ETB 传输块结束 24 CAN 取消 25 EM 介质结束 26 替补替补 27 ESC Escape[i] 28 FS 文件分隔符 29 GS 组分离器 30 RS 记录分隔符 31 美制单位分隔符
在标准中没有办法做到这一点,我不知道有第三方库能够做到这一点。您最好的选择是自己创建一个带有映射的表。您只需要创建一些特殊的映射,因为大多数字符都以它们的显示方式命名。
man ASCII
可以帮忙:
#include <stdio.h>
#include <string.h>
FILE *popen(const char *command, const char *mode);
int pclose(FILE *stream);
int main(void)
{
FILE *cmd = popen("man ASCII", "r");
char *key = "010";
char result[128];
while (fgets(result, sizeof(result), cmd) != NULL)
if (strstr(result, key))
printf("key %s: %s", key, result);
pclose(cmd);
return 0;
}