进制,编码解码,协议瞎扯淡1

本文深入探讨了进制与编码的基础知识,特别是二进制与十六进制在计算机科学中的重要性和优雅之处,并通过实例展示了ASCII码如何在计算机中进行编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分别悟出了进制,编码解码,协议是计算机水平进步的一个个阶梯。


进制和编码解码是密切相关的,其中最重要的是二进制和十六进制。二进制的重要性不言而喻,但是为什么十六进制如此重要呢?为什么十进制不取代十六进制呢?


我希望你使用过例如 WinHex 或者 UltraEdit的十六进制模式 打开过文件,这样你会更容易理解我在扯什么淡。


下面我来回答“为什么十进制不取代十六进制呢?”
答案是二进制更容易转化为十六进制,同时最重要的是二进制和十六进制之间非常完美的对齐。

下面我来详细的解释一下这个答案。从学计算机的那天开始,老师就告诉我们在计算机里面,所有的英文字母都对应到一个数字编码,这就是ASCII码(American Standard Code for Information Interchange)。ASCII码是很久很久以前(1968年)制定的。它只使用了一个8位字节中的低7位,总共是127个编码位。

好的,8位字节如下显示 0000,0000 到 1111,1111 ,转化为10进制就是0到256,转化为16进制就是00到EE。很显然10进制的表示不方便于对齐,就算你把10进制都强制格式化为000到256,需要占3个位置。明显没有16进制天生的优雅。

截个图给大家欣赏一下,如下图:


 

理解了上面的问题,我们就可以继续讨论编码解码了。编码解码是非常重要的计算机基础,也是加密解密的基础。
继续上面关于ASCII码的讨论,前面说过,“ASCII码总共是127个编码位”,也就是说,ASCII码只表示了127个字符,这127个字符中还有大约33个控制字符是看不见的,比如空格,换行之类的不可见字符。

为了加深理解,我们来做个试验:

写一个java类EncodeTest.java

 

package depeng.test;

public class EncodeTest {
    public static void main(String[] args) {
        System.out.println("Hello World!");        
    }
}


使用WinHex 或者 UltraEdit的十六进制模式 打开EncodeTest.java,到网上找一份ASCII码的列表,对照这份ASCII码列表,看看你输入的"Hello World!"是如何在计算机中编码的。

下面将EncodeTest.java编译为EncodeTest.class,使用WinHex 或者 UltraEdit的十六进制模式 打开EncodeTest.class,上下求索,很容易看到"Hello World!",修改其中的"Hello World!"为"Hello Encode!",运行一下,发现你成功编辑了字节码。

如图2所示:



至此,只是编码解码的简单入门,后面关于乱码的形成与解决方案将更加精彩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值