逆向基础--程序编码(001)

一.位与字节

  比特(Bit):1比特就是1位,每个0或1就是一个位,位是数据存储的最小单位。位是二进制表示,8位二进制是一个字节。 8位二进制(就是8个比特)最大:11111111

  字节(Byte):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。

  1个字节等于8位二进制, 8位二进制可存储从00000000到11111111的256个不同的值中的一个。也就是可以存储整数:0~256,以及 -128到127(含)的有符号数字。

   可以理解为字节是容器,一个容器有8个格子,每个格子存放一个bit (0和1)

 

二.字符编码  

  字符编码包括: ASCII编码和Unicode编码

  ASCII编码:使用一个字节(8bit)来表示一个字符,但实际上只使用了7位,共128个字符。包括英文字母、数字、标点符号和控制字符。由于ASCII只能表示128个字符,对于其他语言的字符无法表示,因此出现了多种扩展的字符集(如ISO-8859-1)和Unicode。

  Unicode是一个旨在包含所有字符的字符集。如UTF-8、UTF-16、UTF-32。

        UTF-8:是一种变长编码,使用1到4个字节来表示一个字符。英文字符在UTF-8中仍然用一个字节表示,与ASCII兼容。而中文等其他字符则用多个字节。  

        UTF-16:使用2个或4个字节来表示一个字符。

        UTF-32:固定使用4个字节表示一个字符。

 计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一次最多能处理32位数据。

字符【A】的转换示例

字符'A'在UTF-8编码下是一个字节,且与ASCII相同,其十六进制为0x41。
现在要将0x41转换成二进制。4和1分别对应4位二进制:
4 -> 0100
1 -> 0001
所以字符【A】的16进制为0x41, 转为二进制就是 01000001

 

字符【中】的转换示例分二种编码:Unicode和UTF-8

Unicode: U+4E2D (等于0x4E2D)
4E2D (十六进制) = 0100 1110 0010 1101 (二进制,共15位,我们将其扩展为16位,即两个字节)
U+4E2D的二进制表示是:100111000101101(15位),但通常我们按16位处理,即前面补0,成为:0100111000101101。

UTF-8编码: 11100100 10111000 10101101 (二进制,属于三个字节)
三个字节分别转十六进制: E4 B8 AD
实际存储,这三个字节连续存储: 111001001011100010101101

  在Unicode中,码点通常表示为 U+XXXX 的形式,其中XXXX是十六进制数字。这种表示法是Unicode标准约定的。而在编程语言或内存地址中,我们通常使用0x作为十六进制的前缀

  为什么Unicode码点用U+开头?

    ---这是Unicode标准规定的写法,用于明确表示这是一个Unicode码点。它直接告诉我们这个数字是Unicode字符的编号。
  为什么字符【中】的16进制为4E2D?

    ---Unicode码点的分配是有规律的,汉字集中在U+4E00到U+9FFF这个区间(称为CJK统一汉字)。'中'这个字位于这个区间内,具体是U+4E2D。

  用户输入: '中' -->应用程序: 识别为 Unicode 字符-->操作系统: 查找 Unicode 码点表 → U+4E2D-->转为字节-->存储或传输

 

三.转换关系

字节--->16进制 
示例字节:
11100100 二进制: 1110 0100 十六进制: E 4 结果为:E4

 

16进制-->字节
十六进制OxE4
转为二进制:1110  0100 (E对应1110  4对应0100)
字节结果为:11100100  

 

 

四.前缀约定

  3.1不同领域的十六进制前缀约定

领域前缀示例说明
编程语言 0x 0x4E2D C/C++/Java/Python等语言标准
Unicode标准 U+ U+4E2D Unicode码点的专用表示法
汇编语言 h后缀 4E2Dh 某些汇编器的约定
通用表示 无或# 4E2D 或 #4E2D 文档或通用场景

  3.2不同领域的二进制约定

领域前缀/后缀示例说明
现代编程语言 0b 或 0B 0b1010 C++14+, Java 7+, Python, Rust, Go
传统编程语言 无标准表示 B"1010" 需要库函数或特殊语法
汇编语言 b 后缀 1010b MASM, NASM, 部分汇编器
汇编语言(其他) % 前缀 %1010 某些汇编器变体
Verilog/VHDL 'b 前缀 8'b1010_1100 硬件描述语言
文档/教科书 下标₂ 1010₂ 学术论文、教材
网络协议 无前缀 10101100 RFC文档、协议规范
配置文件 无标准 多种形式 依具体软件而定

 注意:0x是一个前缀,表示后面跟着的数字是十六进制数。如:0x41

   0b 或 0B是一个前缀,表示二进制。如:0b01000001

   0 是一个前缀,表示八进制。如:041

     十进制是没有前缀的

   HTML实体:中(十六进制)或 中(十进制) 

   CSS Unicode:\4E2D(十六进制)

   XML:中(十六进制)

 

posted on 2025-10-28 19:41  花阴偷移  阅读(7)  评论(0)    收藏  举报

导航