kendezhu 2012-03-25 20:56
浏览 232
已采纳

字符编码的相关知识联想到本地二进制代码困惑

最近在看字符编码的相关知识,又联想到二进制代码的知识,由于本人不是科班出身,对一些二进制代码即本地代码了解不深,所以有几个问题感到很困惑,所以希望懂相关知识的人帮我顺一顺。
VS默认是将文本本件(包括cs文件)以utf-8编码方案编码成字节的,举个例子

我们AaBb经过utf-8编码后是E6 88 91 E4 BB AC 41 61 42 62
E6 88 91(代表我) E4 BB AC(代表们) 41(A) 61(a) 42(B) 62(b)

[color=red]第一个问题:[/color]我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式? 如下
11100110 10001000 10010001(代表我) 11100100 10111011 10101100(代表们) 1000001(A) 1100001(b) 1000010(B) 1100010(b)

如果换成是utf-16编码的 Little_Edian方式(每个字符占2个字节) 就是
11 62(代表我) EC 4E(代表们) 41 00(A) 61 00(a) 42 00(B) 62 00(b)

既然说到了2进制,我就想起了本地代码,从开始学语言的时候就看到各种各样的人说机器语言是01010这种2进制云云...
那么对于C# java先看一下下面
源代码 C#,java

托管代码 .NET:IL(中间语言) JAVA:字节码等

非托管代码(本地代码,二进制代码,机器语言)http://baike.baidu.com/view/2418160.htm

首先看源代码,如果我们只是保存它们,当然就是像上面那样用某种编码方式将其保存成字节
[color=red]第2个问题:[/color]如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里?

[color=red]第3个问题:[/color]当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢?

看了上面的提问,感觉我要问的好像是编译的得到的2进制代码与编码得到的2进制代码有什么区别,然后是编译源代码得到的2进制代码与编译托管代码得到的2进制代码有什么区别。

[color=red]第4个问题:[/color]既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗?

  • 写回答

1条回答 默认 最新

  • wlx0710 2012-03-26 13:58
    关注

    :o 一下子问4个问题,才给5分。。。 :cry:

    第一个问题:我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式?

    A:16进制和2进制都只是数字的一种表示形式,是外在的表现,对内在的实际涵意没有任何影响。

    你可以这么理解,机器读2进制比较方便,因为简单。人读16进制比较方便,因为简略。

    第2个问题:如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里?

    A:这涉及到编译原理的问题,当然这里可以用比较通俗的方式讲就是,你的代码都是用文本方法写的,所以直接保存的也都是字符串,人可以理解是代码,但机器只能识别为字符串。 要想让机器识别成可执行的代码,那就要通过一定的规则转换成机器码。转换后机器就可以执行了,但人去看就是一堆乱码了。

    第3个问题:当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢?

    A:首先,你要明白为什么要分成“托管代码”和“本地代码”,这主要是因为执行平台的不同,导致你要写多种不同的代码来实现相同的功能。为了解决这个问题,就出现了“虚拟机”如JVM,这样的东西。 主要的原理就是你根据“虚拟机”所提供的功能来实现业务逻辑,我为不同的平台开发做不同的“虚拟机”来实现我所提供的功能,这样就可以跨平台了。 剩下的你应该明白一点了吧

    第4个问题:既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗?

    A:说简单点,因为图片是大文件,可以有自己的文件格式,比如,GIF文件的文件头就是git,ZIP文件的文件头就是'PK'等等,所以它们都可以被很容易的识别。

    而字符串不一样,它们很零碎,种类也很多。如GBK,是中文的编码,里面只有中文和英文,而UTF-8是包含了所有的语言。他们实现上就是通过对数字的分段来实现识别不同的文字。当然识别的越多所需要的数字就越大,所需要的存储空间和网络流量就越多,所以在socket里尽量选择合适的编码,来提高性能。

    就说这么多吧,希望能给你一点小小的帮助 :lol:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP