-1

有没有办法获取 ascii 的值的名称。

例如

0x08 或只有 8 是退格键

我可以在 c 或 c++ 中获得名称“Backspace”吗?

4

4 回答 4

1

简而言之,没有。不过,很容易解决。

如果您的 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]);
于 2013-11-05T09:52:10.863 回答
0

其中只有 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 美制单位分隔符
于 2013-11-05T09:33:58.520 回答
0

在标准中没有办法做到这一点,我不知道有第三方库能够做到这一点。您最好的选择是自己创建一个带有映射的表。您只需要创建一些特殊的映射,因为大多数字符都以它们的显示方式命名。

于 2013-11-05T09:34:11.330 回答
0

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;
}
于 2013-11-05T10:02:47.407 回答