解码C语言基础

注释

类型 语法 规则与场景 示例
单行注释 // 注释内容 仅作用于行尾,适用于短注释(变量/单行代码说明) // 定义用户年龄变量
int age;
printf("输入年龄:"); // 提示用户输入
多行注释 /* 注释内容 */ 可跨多行,适用于长注释(函数文档/代码块逻辑) /*
* 函数名:add
* 功能:计算两数之和
* 参数:a、b为待加整数
* 返回值:两个数的和(int类型)
*/
int add(int a, int b) { ... }

main函数-程序的入口

主函数有且只有一个

main无参形式

/*
函数名:main
函数参数:无
函数返回值:
	返回0:表示函数正常退出
	返回非0:表示函数异常退出
*/
int main(void)
{
    /* code */
    return 0;
}

main有参形式

/*
函数名:main
函数参数:
	argc:参数个数
	argv:参数数组,每个参数是一个字符串
函数返回值:
	返回0:表示函数正常退出
	返回非0:表示函数异常退出
*/
int main(int argc, char const *argv[])
{
    /* code */
    return 0;
}

man帮助手册(九册)

提供命令、函数、系统调用、配置文件等的权威说明

1.Shell命令(默认已安装)
2.系统调用(函数手册 - 这些函数由系统内核直接提供)
3.库函数(函数手册 - 这些函数有标准库提供)
4.特殊文件(通常出现在/dev目录下)
5.文件的特殊格式或协定(例如/etc/passwd的格式)
6.游戏
7.杂项(例如一些宏定义)
8.系统管理员命令(通常只能由管理员执行)
9.非标准内核例程

系统只安装第一册,以下帮助信息一般需要用户自己手动安装

sudo apt-get install manpages
sudo apt-get install manpages-dev
sudo apt-get install manpages-posix
sudo apt-get install manpages-posix-dev

使用技巧

#查看指定命令/函数的手册(自动匹配优先章节)
man [名称]  # 例:man cp、man malloc

#查看指定章节的内容
man [章节号] [名称]  # 例:man 3 malloc、man 5 sshd_config

#搜索包含关键词的所有手册(-k 表示“keyword”)
man -k [关键词]  # 例:man -k "file copy"(搜索与“文件复制”相关的命令)

常量与变量

C语言标准规定:用户有权利从内存中申请一块存储单元,并且用户可以对存储单元进行命名,要求用户提前说明申请的存储单元(单位以字节来计算)的大小,这样linux内核才会从内存中寻找一块合适的空间,并把这块空间的地址反馈给用户。
![在这里插入图片描述](https://i-image
用户可以对linux内核提供的存储单元进行命名,然后linux内核会把用户的命名和存储单元的地址建立一个映射关系,这样用户就可以通过存储单元的名称来访问存储单元。

  • 变量是程序运行中值可以动态变化的内存单元,需声明数据类型,用于存储临时结果、用户输入等可变数据。
  • 常量是值一旦定义就不可修改的标识符,分为字面常量(直接写在代码中的值)和符号常量(用#define或const定义的有名字的常量),用于表示固定不变的数据(如 π 值、配置参数等)。
  • 变量和常量也被称为标识符,对于标识符的命名必须遵循规则:标识符是由字母、数字、下划线以及美元符号$组成,并且标识符的第一个字符只能是字母或者下划线
特性 变量(Variable) 常量(Constant)
定义方式 数据类型 + 变量名(可初始化)
例:int num = 10;
宏常量:#define 常量名 值
例:#define MAX 100

常变量:const 类型 常量名 = 值
例:const float PI = 3.14f
值的可修改性 运行中可通过赋值语句修改
例:num = 20;
定义后不可修改,强行修改会编译报错
数据类型 必须显式声明类型(如 intfloat 宏常量无类型;
常变量需显式声明类型
内存分配 定义时分配内存,存储在可读写区域 宏常量不分配内存(预处理阶段直接文本替换);
常变量分配内存(可能在只读区域)
作用域 局部变量:函数/代码块内有效
全局变量:整个程序有效
宏常量无作用域(预处理全局替换);
常变量作用域与变量一致(局部/全局)
生命周期 局部变量:函数/代码块执行期间存在
全局变量:程序运行期间一直存在
宏常量无生命周期(预处理阶段生效);
常变量生命周期与变量一致
初始化要求 局部变量可先声明后赋值(未初始化时为随机值)
全局变量未初始化时默认值为 0
必须在定义时初始化(否则无意义)
典型用途 存储程序运行中可能变化的数据
- 临时计算结果
- 用户输入
- 循环计数器
- 程序状态标志
- 中间值
存储程序运行中固定不变的值
- 配置参数(如数据库连接字符串、API密钥)
- 数学/物理常数(如π、重力加速度)
- 枚举值/状态码(如错误码、菜单选项)
- 魔法数字/字符串的字面量替代(提高可读性)
- 标准值/阈值(如最大登录尝试次数、超时时间)

作用域

作用域类型 定义位置 / 方式 有效范围(可见区域) 生命周期(存在时间) 核心特性 典型使用场景
局部变量 函数内部、{} 包裹的代码块(如 if/for 块) 仅在定义它的函数或代码块内,出界后不可访问 函数 / 代码块执行时创建,执行结束后销毁(栈内存) - 不同函数/块中可同名,互不干扰
- 未初始化时值为随机值
- 内存自动回收
函数内临时存储数据(如计算中间值、循环计数器 i
函数参数(形参) 函数定义的参数列表中(如 void func(int x) 仅在当前函数内部有效,等同于函数的“局部变量” 函数被调用时初始化,函数执行结束后销毁(栈内存) - 由调用者传入的实参赋值
- 作用域与函数内局部变量一致
- 本质是函数的“输入接口”
函数间传递数据(如向 add(a,b) 传递两个待加数值)
全局变量 所有函数外部(通常在源文件开头) 从定义位置开始,到整个源文件结束,所有函数可访问 程序启动时创建,程序退出时销毁(静态内存) - 未初始化时默认值为 0
- 可通过 extern 关键字跨文件访问
- 全程序共享
多个函数需共享的数据(如配置参数、全局状态标记,需谨慎使用以避免耦合)
块作用域变量 内层代码块(如 { int b = 2; } 仅在定义它的内层代码块内,出块后不可访问 代码块执行时创建,执行结束后销毁(栈内存) - 会屏蔽外层同名变量(局部/全局)
- 进一步缩小变量作用范围,减少命名冲突
限制变量作用域(如 for 循环内的计数器 i,仅在循环块内使用,避免污染外部)

注. 同名变量屏蔽规则:当不同作用域的变量同名时,内层作用域变量会屏蔽外层变量(优先级:块作用域 > 函数参数 > 局部变量 > 全局变量)。例如,函数内的局部变量会覆盖同名全局变量,内层代码块的变量会覆盖外层函数的同名变量。

基本数据类型

  • 整型
类型声明 符号属性 占用内存(字节) 取值范围(以对应系统位数为准) 适用场景
char 有符号 1 -128 ~ 127 存储单个字符(ASCII 码)
unsigned char 无符号 1 0 ~ 255 存储无负数值(如颜色值、字节)
short 有符号 2 -32768 ~ 32767 存储较小范围的整数
unsigned short 无符号 2 0 ~ 65535 存储无负的小整数
int 有符号 4 -2147483648 ~ 2147483647 默认整数类型(最常用)
unsigned int 无符号 4 0 ~ 4294967295 存储非负整数(如计数、ID)
long 有符号 4(32 位系统)/ 8(64 位系统) -2147483648 ~ 2147483647(32 位系统) 存储较大范围的整数
unsigned long 无符号 4(32 位系统)/ 8(64 位系统) 0 ~ 4294967295(32 位系统) 存储无负的大整数
long long 有符号 8 -9223372036854775808 ~ 9223372036854775807 存储极大范围的整数(C99 标准新增)
unsigned long long 无符号 8 0 ~ 18446744073709551615 存储无负的极大整数
  • 浮点型
类型声明 占用内存(字节) 有效数字位数 取值范围(近似) 适用场景
float 4 6~7 位 ±3.4×10^-38 ~ ±3.4×10^38 单精度浮点数(内存占用小,精度要求低)
double 8 15~17 位 ±1.7×10^-308 ~ ±1.7×10^308 双精度浮点数(默认浮点类型,精度要求高)
long double 8/12/16(因编译器/平台而异) 18~19 位 ±3.4×10^-4932 ~ ±1.1×10^4932 高精度浮点数(极少用,如科学计算)

科学计数法

格式:系数 e/E 指数

  • 系数是 “e/E” 之前的部分,必须是有效的浮点数形式不能省略,支持整数 / 小数形式,可带正负号
  • 指数是 “e/E” 之后的部分,必须是整数不能省略,可带正负号

仅支持 float(单精度)和 double(双精度)

  • 默认类型:科学计数法常量(如 1.23e4)默认是 double
  • 指定 float:需加后缀 f(如 1.23e4f)。

通过格式化函数实现,核心格式符为 %e/%E

  • 输出(printf):%e 用小写 e,%E 用大写 E,默认保留 6 位小数;可加 %.N 控制精度(如 %.2e 保留 2 位),例:printf("%.2e", 1234.5); 输出 1.23e+03
  • 输入(scanf):用 %e 读取科学计数法输入(支持 e/E),例:scanf("%e", &double_var); 可读取 1.23e45.6E-3
    • 精度误差:浮点数为二进制近似存储,科学计数法运算可能有舍入误差(如 0.1e1 非精确 1),避免用 == 直接比较,小数点后每一位的权重是 2 的负整数次幂,从左到右(第 1 位到第 n 位)权重依次为 2⁻¹、2⁻²、2⁻³ ... 2⁻ⁿ
    • 类型匹配:scanffloat%e,读 double 建议用 %le(部分编译器兼容 %e,但需严谨)。
  • 布尔类型(头文件<stdbool.h>)
类型声明 占用内存(字节) 取值范围 说明
bool 1(通常) true / false true 等价于整数 1,false 等价于整数 0

printf-标准输出

printf原型

/*
函数名:printf
函数参数:
	format:格式化字符串
	...:可变参数列表,对应格式说明符的具体值
函数返回值:
	int 类型,成功时返回打印的字符总数
	失败时返回负数
*/
int printf(const char *format, ...);

转义字符

方便快速查阅:

转义字符 含义(ASCII 值) 描述(功能) 示例及输出效果
\n 换行(10) 光标移至下一行开头 printf("Hello\nWorld");
输出:
Hello
World
\t 水平制表(9) 光标移至下一个制表位(类似 Tab 键,通常 8 个字符宽) printf("Name\tAge");
输出:Name Age(中间为制表位空格,约 4 个字符宽)
\r 回车(13) 光标移至当前行开头(不换行,后续字符会覆盖前行内容) printf("Hello\rHi");
输出:Hiello(“Hi” 覆盖 “Hello” 前两个字符)
\b 退格(8) 光标回退一个字符(删除前一个字符的显示) printf("Hello\bWorld");
输出:HellWorld(“o” 被退格删除)
\' 单引号(39) 在单引号字符串中表示单引号本身(避免被解析为字符串结束符) printf('It\'s a cat');
输出:It's a cat
\" 双引号(34) 在双引号字符串中表示双引号本身(避免被解析为字符串结束符) printf("He said \"Hi\"");
输出:He said "Hi"
\\ 反斜杠(92) 表示反斜杠本身(避免被解析为转义符前缀) printf("Path: C:\\test");
输出:Path: C:\test
\0 空字符(0) 字符串结束标志(不显示,用于标记字符串结尾,C/C++ 中自动添加) char str[] = "abc\0def";
输出 str 时显示:abc(遇 \0 终止)
\v 垂直制表(11) 光标移至下一个垂直制表位(较少用,用于表格排版,效果依终端而定) printf("Line1\vLine2");
输出:
Line1
   Line2(垂直对齐)
\f 换页(12) 光标移至下一页开头(常用于打印文档分页,终端中多表现为换行或清屏) 打印时触发换页,终端示例:printf("Page1\fPage2"); 输出分页内容
\ddd 八进制数表示的字符 ddd 为 1-3 位八进制数(0-7),对应 ASCII 码字符(如 \141 对应 a printf("\141\142\143");
输出:abc(八进制 141=97=a,142=98=b,143=99=c)
\xhh 十六进制数表示的字符 hh 为 1-2 位十六进制数(0-9、a-f、A-F),对应 ASCII 码字符(如 \x61 对应 a printf("\x61\x62\x63");
输出:abc(十六进制 61=97=a,62=98=b,63=99=c)

scanf

scanf原型

/*
函数名:scanf
函数参数:
	format:格式化字符串
	...:可变参数列表,指向用于存储输入数据的变量地址
函数返回值:
	int 类型,成功时返回成功读取并赋值的变量个数
	失败时返回EOF(通常为-1),遇到文件结束或错误时返回
*/
int scanf(const char *format, ...);

格式控制符

类型符 含义 示例 输出结果
%d 十进制整数(int printf("%d", 123); 123
%u 无符号十进制整数(unsigned printf("%u", 123U); 123
%x 十六进制整数(小写) printf("%x", 255); ff
%X 十六进制整数(大写) printf("%X", 255); FF
%o 八进制整数 printf("%o", 8); 10
%f 浮点数(float/double printf("%f", 3.14); 3.140000
%c 单个字符(char printf("%c", 'A'); A
%s 字符串(char* printf("%s", "hello"); hello
%p 指针地址 printf("%p", &a); 0x7ffd8a5b9a3c
%% 输出 % 本身 printf("%%"); %

附加格式修饰符

修饰符格式 含义说明 示例代码 输出结果(注:用“□”标记空格,便于查看对齐效果)
%md 输出宽度为 mm 为正整数),不足宽度用空格填充,内容右对齐 printf("%5d", 10); □□□10(共5位,前补3个空格)
%-md 输出宽度为 mm 为正整数),不足宽度用空格填充,内容左对齐 printf("%-5d", 10); 10□□□(共5位,后补3个空格)
%0md 输出宽度为 mm 为正整数),不足宽度用 0 填充(仅对数值有效) printf("%05d", 10); 00010(共5位,前补3个0)
%m.nf 输出总宽度为 m,同时保留 n 位小数,不足总宽度用空格填充 printf("%8.2f", 3.14159); □□□□3.14(总8位,小数点后2位,前补4个空格)
%.nf 不限制输出宽度,仅指定保留 n 位小数(宽度随内容自适应) printf("%.3f", 3.14); 3.140(仅保留3位小数,无空格填充)
%*.*f 输出宽度和小数位数由参数动态指定(第一个 * 对应宽度,第二个 * 对应小数位) printf("%*.*f", 8, 2, 3.14); □□□□3.14(效果同 %8.2f,参数依次传入宽度、小数位、数值)

类型转换

类型转换是将一种数据类型的值转换为另一种数据类型的过程,主要用于不同类型数据之间的运算或赋值。

  • 隐式类型转换
    隐式类型转换由编译器自动完成,无需程序员干预,遵循 "低精度向高精度转换" 的原则(避免数据丢失)
    • 算术运算中的转换
      不同类型数据参与运算时,自动转换为其中精度最高的类型
      转换优先级(从低到高):char → short → int → unsigned int → long → unsigned long → long long → float → double → long double
    • 赋值运算中的转换
      右值自动转换为左值的类型
      若右值精度高于左值,可能导致数据截断或精度损失
    • 函数调用中的转换
      实参自动转换为形参的类型

eg

#include <stdio.h>

int main() {
    char c = 'A';      // 'A'的ASCII码为65
    int i = 100;
    float f = 3.14f;
    double d = 2.718;

    // 1. 算术运算转换
    int result1 = c + i;   // c自动转换为int(65 + 100 = 165)
    double result2 = i + f; // i和f自动转换为double(100.0 + 3.14 = 103.14)

    // 2. 赋值转换
    int result3 = f;      // f(3.14)转换为int(3),精度损失
    float result4 = d;    // d(2.718)转换为float(2.718f),可能损失精度

    printf("c + i = %d\n", result1);   // 输出:165
    printf("i + f = %lf\n", result2);  // 输出:103.140000
    printf("f -> int = %d\n", result3); // 输出:3
    printf("d -> float = %f\n", result4); // 输出:2.718000

    return 0;
}
  • 显示类型转换
    显式类型转换由程序员手动指定,使用强制转换运算符实现,语法为:(目标类型) 表达式

eg

#include <stdio.h>

int main() {
    float f = 3.14159f;
    int i = 100;
    double d = 2.71828;

    // 强制转换示例
    int num1 = (int)f;          // 将float转换为int(3.14159 → 3)
    float num2 = (float)d;      // 将double转换为float(可能损失精度)
    char ch = (char)i;          // 将int转换为char(100 → 'd',ASCII码)

    // 运算中的强制转换
    float average = (float)10 / 3;  // 10先转换为float,结果为3.333...
    int area = (int)(3.14 * 5 * 5); // 先计算再转换,结果为78

    printf("(int)3.14159 = %d\n", num1);       // 输出:3
    printf("(float)2.71828 = %f\n", num2);     // 输出:2.718280
    printf("(char)100 = %c\n", ch);            // 输出:d
    printf("(float)10/3 = %f\n", average);     // 输出:3.333333
    printf("(int)(3.14*5*5) = %d\n", area);    // 输出:78

    return 0;
}

进制转换

  • 常见进制及表示符号

计算机领域常用进制包括:

进制 基数 数字范围 表示前缀(编程中) 示例
二进制 2 0, 1 0b(如0b1010 1010(对应十进制 10)
八进制 8 0~7 0(如012 12(对应十进制 10)
十进制 10 0~9 无(默认) 10(对应十进制 10)
十六进制 16 0~9, A~F(10~15) 0x(如0xA A(对应十进制 10)
  • 十进制转其他进制(整数部分)

    方法:除基取余,逆序排列

    • 步骤:将十进制数反复除以目标进制的 “基数”,记录每次的余数,直到商为 0;最后将余数从后往前排列,即为结果。

    • 十进制 → 二进制(基数 2)

      例:将十进制13转为二进制

      • 13 ÷ 2 = 6 余 1(最低位)
      • 6 ÷ 2 = 3 余 0
      • 3 ÷ 2 = 1 余 1
      • 1 ÷ 2 = 0 余 1(最高位)
      • 逆序排列余数:1101 → 结果:0b1101
    • 十进制 → 八进制(基数 8)

      例:将十进制65转为八进制

      • 65 ÷ 8 = 8 余 1(最低位)
      • 8 ÷ 8 = 1 余 0
      • 1 ÷ 8 = 0 余 1(最高位)
      • 逆序排列余数:101 → 结果:0101
    • 十进制 → 十六进制(基数 16)

      例:将十进制255转为十六进制

      • 255 ÷ 16 = 15 余 15(即F,最低位)
      • 15 ÷ 16 = 0 余 15(即F,最高位)
      • 逆序排列余数:FF → 结果:0xFF
  • 十进制转其他进制(小数部分)

    方法:乘基取整,顺序排列

    • 步骤:将十进制小数反复乘以目标进制的 “基数”,记录每次乘积的整数部分(0 或基数内的数),直到小数部分为 0(或达到所需精度);最后将整数部分从前往后排列,即为结果。

    • 十进制 → 二进制(基数 2)

      例:将十进制0.625转为二进制

      • 0.625 × 2 = 1.25 → 整数部分1(最高位),剩余小数0.25
      • 0.25 × 2 = 0.5 → 整数部分0,剩余小数0.5
      • 0.5 × 2 = 1.0 → 整数部分1(最低位),剩余小数0
      • 顺序排列整数:101 → 结果:0b0.101
    • 注意:无限循环小数

      部分十进制小数无法用有限位其他进制表示(如0.1转二进制),需按精度截断:例:十进制0.1转二进制(取前 8 位)

      • 0.1×2=0.2→0;0.2×2=0.4→0;0.4×2=0.8→0;0.8×2=1.6→1
      • 0.6×2=1.2→1;0.2×2=0.4→0;0.4×2=0.8→0;0.8×2=1.6→1
      • 结果:0b0.00011001(无限循环,实际为0.000110011...
  • 其他进制转十进制

    方法:按权展开求和

    • 整数部分:从右到左,第 n 位(起始 0)的权重为 “基数ⁿ”,数字 × 权重后求和;

    • 小数部分:从左到右,第 n 位(起始 1)的权重为 “基数⁻ⁿ”,数字 × 权重后求和。

    • .二进制 → 十进制

      例:二进制1010.101转十进制

      • 整数部分:1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10
      • 小数部分:1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.5 + 0 + 0.125 = 0.625
      • 总和:10 + 0.625 = 10.625
  • 八进制 → 十进制

例:八进制12.4转十进制

  • 整数部分:1×8¹ + 2×8⁰ = 8 + 2 = 10

  • 小数部分:4×8⁻¹ = 4×0.125 = 0.5

  • 总和:10 + 0.5 = 10.5

  • 十六进制 → 十进制

    例:十六进制A.8转十进制(A=10)

    • 整数部分:10×16⁰ = 10
    • 小数部分:8×16⁻¹ = 8×0.0625 = 0.5
    • 总和:10 + 0.5 = 10.5
  • 二进制与八 / 十六进制快速转换

    利用 “2 的整数次幂” 关系(3 位二进制 = 1 位八进制,4 位二进制 = 1 位十六进制),直接分组转换。

    • 二进制 ↔ 八进制(3 位一组)

      • 整数部分:从右向左每 3 位分组,不足补 0;
      • 小数部分:从左向右每 3 位分组,不足补 0;
      • 每组对应 1 位八进制数。

      例:二进制10110.1011转八进制

      • 整数:10110 → 补 0 为010 110 → 对应2 6 → 整数部分26
      • 小数:1011 → 补 0 为101 100 → 对应5 4 → 小数部分54
      • 结果:26.54(八进制)
    • 二进制 ↔ 十六进制(4 位一组)

      • 整数部分:从右向左每 4 位分组,不足补 0;
      • 小数部分:从左向右每 4 位分组,不足补 0;
      • 每组对应 1 位十六进制数(10~15 用 A~F 表示)。

      例:二进制10110.1011转十六进制

      • 整数:10110 → 补 0 为0001 0110 → 对应1 6 → 整数部分16
      • 小数:1011 → 无需补 0 → 对应B → 小数部分B
      • 结果:16.B(十六进制)
  • 核心总结

  • 十进制转其他进制:整数 “除基取余(逆序)”,小数 “乘基取整(顺序)”;

  • 其他进制转十进制:按权展开求和(整数权正次幂,小数权负次幂);

  • 二进制与八 / 十六进制:3 位 / 4 位一组直接转换,高效便捷;

  • 注意:小数转换可能出现无限循环,需按精度截断(如浮点数存储)。

源码补码反码

编码方式 定义说明 正数表示规则 负数表示规则 示例(以 -3 为例,8 位)
源码 直接用符号位和数值位表示的二进制形式,符号位(最高位)0 表示正,1 表示负 符号位为 0,数值位为二进制绝对值 符号位为 1,数值位为二进制绝对值 10000011
反码 正数与源码相同,负数是对源码的数值位按位取反(符号位不变)得到的编码形式 与源码相同(符号位 0,数值位不变) 符号位为 1,数值位按位取反(0→1,1→0) 11111100
补码 正数与源码相同,负数是对反码加 1(若有进位则丢弃)得到的编码形式,是计算机实际存储整数的方式 与源码相同(符号位 0,数值位不变) 反码 + 1(若反码加 1 后有进位,直接丢弃) 11111101

附- ASCII码

十进制 二进制 字符 说明(控制字符)/ 字符(可打印字符) 十进制 二进制 字符 说明(控制字符)/ 字符(可打印字符)
0 00000000 NUL 空字符 64 01100000 @ 艾特符号
1 00000001 SOH 标题开始 65 01100001 A 大写字母A
2 00000010 STX 文本开始 66 01100010 B 大写字母B
3 00000011 ETX 文本结束 67 01100011 C 大写字母C
4 00000100 EOT 传输结束 68 01100100 D 大写字母D
5 00000101 ENQ 询问字符 69 01100101 E 大写字母E
6 00000110 ACK 确认字符 70 01100110 F 大写字母F
7 00000111 BEL 响铃(告警) 71 01100111 G 大写字母G
8 00001000 BS 退格(Backspace) 72 01101000 H 大写字母H
9 00001001 HT 水平制表符(\t) 73 01101001 I 大写字母I
10 00001010 LF 换行(\n) 74 01101010 J 大写字母J
11 00001011 VT 垂直制表符 75 01101011 K 大写字母K
12 00001100 FF 换页 76 01101100 L 大写字母L
13 00001101 CR 回车(\r) 77 01101101 M 大写字母M
14 00001110 SO 移位输出 78 01101110 N 大写字母N
15 00001111 SI 移位输入 79 01101111 O 大写字母O
16 00010000 DLE 数据链路转义 80 01110000 P 大写字母P
17 00010001 DC1 设备控制1 81 01110001 Q 大写字母Q
18 00010010 DC2 设备控制2 82 01110010 R 大写字母R
19 00010011 DC3 设备控制3 83 01110011 S 大写字母S
20 00010100 DC4 设备控制4 84 01110100 T 大写字母T
21 00010101 NAK 否定应答 85 01110101 U 大写字母U
22 00010110 SYN 同步空闲 86 01110110 V 大写字母V
23 00010111 ETB 传输块结束 87 01110111 W 大写字母W
24 00011000 CAN 取消 88 01111000 X 大写字母X
25 00011001 EM 媒体结束 89 01111001 Y 大写字母Y
26 00011010 SUB 替换 90 01111010 Z 大写字母Z
27 00011011 ESC 转义(Escape) 91 01111011 [ 左方括号
28 00011100 FS 文件分隔符 92 01111100 \ 反斜杠
29 00011101 GS 组分隔符 93 01111101 ] 右方括号
30 00011110 RS 记录分隔符 94 01111110 ^ 插入符号
31 00011111 US 单元分隔符 95 01111111 _ 下划线
32 01000000 (空格) 空格 96 10000000 ` 反引号
33 01000001 ! 感叹号 97 10000001 a 小写字母a
34 01000010 " 双引号 98 10000010 b 小写字母b
35 01000011 # 井号 99 10000011 c 小写字母c
36 01000100 $ 美元符号 100 10000100 d 小写字母d
37 01000101 % 百分号 101 10000101 e 小写字母e
38 01000110 & 和号 102 10000110 f 小写字母f
39 01000111 ' 单引号 103 10000111 g 小写字母g
40 01001000 ( 左括号 104 10001000 h 小写字母h
41 01001001 ) 右括号 105 10001001 i 小写字母i
42 01001010 * 星号 106 10001010 j 小写字母j
43 01001011 + 加号 107 10001011 k 小写字母k
44 01001100 , 逗号 108 10001100 l 小写字母l
45 01001101 - 减号/连字符 109 10001101 m 小写字母m
46 01001110 . 句号 110 10001110 n 小写字母n
47 01001111 / 斜杠 111 10001111 o 小写字母o
48 01010000 0 数字0 112 10010000 p 小写字母p
49 01010001 1 数字1 113 10010001 q 小写字母q
50 01010010 2 数字2 114 10010010 r 小写字母r
51 01010011 3 数字3 115 10010011 s 小写字母s
52 01010100 4 数字4 116 10010100 t 小写字母t
53 01010101 5 数字5 117 10010101 u 小写字母u
54 01010110 6 数字6 118 10010110 v 小写字母v
55 01010111 7 数字7 119 10010111 w 小写字母w
56 01011000 8 数字8 120 10011000 x 小写字母x
57 01011001 9 数字9 121 10011001 y 小写字母y
58 01011010 : 冒号 122 10011010 z 小写字母z
59 01011011 ; 分号 123 10011011 { 左花括号
60 01011100 < 小于号 124 10011100 | 竖线
61 01011101 = 等号 125 10011101 } 右花括号
62 01011110 > 大于号 126 10011110 ~ 波浪号
63 01011111 ? 问号 127 01111111 DEL 删除(Delete)
posted @ 2025-09-17 18:56  YouEmbedded  阅读(44)  评论(0)    收藏  举报