0 0

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

最近在看字符编码的相关知识,又联想到二进制代码的知识,由于本人不是科班出身,对一些二进制代码即本地代码了解不深,所以有几个问题感到很困惑,所以希望懂相关知识的人帮我顺一顺。
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)

第一个问题:我是不是可以认为将这些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

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

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

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

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

1个答案 按时间排序 按投票排序

0 0

采纳的答案

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

第一个问题:我是不是可以认为将这些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里尽量选择合适的编码,来提高性能。


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

2012年3月26日 13:58

相关推荐

    VC 文件二进制代码阅读器_VC文件二进制代码阅读器_

    "VC 文件二进制代码阅读器"提供了四种不同的视角来展示这些二进制数据:十进制、十六进制、二进制和对应的字符。这四种表示方式各有其优势: 1. **十进制**:对于大多数人来说,十进制是最直观的计数方式,便于理解...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    在LabVIEW中,标准的字符串函数库可能无法直接完成二进制字符串到十进制数值的转换,因此我们需要自定义方法。给定的文件"1.二进制字符串转十进制数值.vi"可能就是一个这样的自定义VI(Virtual Instrument),它提供...

    将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片

    本文将深入探讨如何将图片转换为二进制格式,然后生成Base64编码字符串,以及如何将这些字符串重新转换回图片。这个过程在很多场景下都有应用,比如在网络上传输图片数据,或者在数据库中存储图片。 首先,我们需要...

    字符二进制编码转换工具

    在计算机科学领域,字符编码是将字符与数字之间建立映射关系的过程,使得计算机能够识别、存储和处理文字。...在日常的编程、网络通信以及数据处理中,掌握字符编码和二进制转换的知识是至关重要的。

    C语言二进制字符串与十六进制字符串相互转化

    本文将深入探讨如何在C语言环境中实现二进制字符串与十六进制字符串之间的转换,并结合MFC(Microsoft Foundation Classes)框架创建一个小工具来辅助这些操作。 首先,让我们理解二进制和十六进制的基本概念。二...

    易语言字节集到二进制互转

    总结来说,易语言中的字节集到二进制互转是编程过程中必不可少的技术,它涉及到了数据的编码和解码。了解并掌握这些转换技巧,能帮助你在处理二进制数据时更加得心应手,提高代码的效率和可读性。在实际开发中,无论...

    二进制代码和字符之间的对应关系

    详细ascii表,二进制代码和字符之间的对应关系,只有英文字符

    VB.NET 字符串与二进制间的转换

    以下是一些关于VB.NET中字符串与二进制转换的关键知识点: 1. **字节数组与字符串转换** - **ToCharArray()**: 字符串可以转换为字节数组,使用`System.Text.Encoding`类中的方法。例如,`Encoding.ASCII....

    labview二进制字符串转十进制

    labview2015版本,将二进制的字符串转换成十进制数值,

    字符串转二进制码流及解码matlab代码.zip

    字符串转二进制码流及解码matlab代码,可用于通信原理实验的仿真,可以将传输中文

    在二进制文件中搜索字符串、十六进制甚至另一个二进制文件_Python

    首先,搜索字符串在二进制文件中可能涉及到读取文件的字节流并查找特定的ASCII字符序列。Python的内置`open()`函数可以以二进制模式('rb')打开文件,然后使用`read()`或`readline()`方法读取数据。你可以使用`str()`...

    linux下int转二进制字符串的方法_int转二进制字符串的方法_QT_linux_

    在Linux环境下,将整型(int)数值转换为二进制字符串是一项常见的编程任务,尤其是在进行低级别编程或者处理位操作时。由于C++标准库中并没有直接提供将整数转换为二进制字符串的函数,程序员往往需要自定义函数来...

    二进制与字符串之间的转换类CBinary

    这通常涉及到将二进制数据视作一系列字节,然后用某种编码(如ASCII、UTF-8等)解释这些字节,生成对应的字符序列。例如,一个字节的二进制值`01001000`对应ASCII编码中的字符'H'。 2. **字符串转二进制**:将字符...

    C# 进制转换的实现(二进制、十六进制、十进制互转)

    由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如: 二进制: 1010 表示为 字符串:”1010″  int d = 10; //十进制转二进制字符串 Console.WriteLine(Convert.ToString(d,2)); //...

    js 显示base64编码的二进制流网页图片

    Base64编码是一种编码方法,它将二进制数据转换为ASCII字符串格式。这种编码方式主要适用于编码那些无法直接通过文本格式传输的数据,比如图片、音频、视频等二进制文件。Base64编码通过把每3个字节的二进制数据转换...

    matlab开发-将二进制字符串转换为十进制值

    在MATLAB中,二进制字符串到十进制值的转换是常见的操作,尤其是在处理数字信号处理、数据编码或通信领域。本知识点将详细介绍如何在MATLAB中进行这种转换,并结合提供的`Bin2Dec.m`脚本来理解其实现。 首先,我们...

    矩阵二进制编码与矩阵定义值二进制编码的数码管显示.rar

    在本例程中,数码管将显示按键的二进制编码,这需要编写适当的驱动代码来控制数码管的各个段,以正确显示二进制数。 压缩包中的"4按键控制4LED"文件名可能表示该例程还涉及到使用4个按键控制4个LED灯的操作。这可能...

    二进制字节与字符串之间的转换

    在IT领域,数据的处理和传输常常涉及到二进制字节和字符串之间的转换。这是因为不同的系统和编程语言可能以不同的方式处理数据,有时需要将原始的二进制数据转化为易于处理和显示的字符串形式,反之亦然。在这个过程...

    c# 二进制与十进制的转换

    例如,二进制到十进制可以使用位移和加法,十进制到二进制则可以使用除以2和模运算。这些方法对于理解底层机制非常有帮助,但通常在实际编程中,直接使用内置的转换函数更为简便和高效。 总之,理解和掌握二进制与...

    十六进制转二进制

    下面将详细介绍如何在C语言中实现十六进制到二进制的转换,并提供相关的知识点。 一、基础知识 1. 进制转换:任何一种进制都可以转换成其他进制。例如,从十六进制转换为二进制,我们可以逐位转换,因为每个十六...

Global site tag (gtag.js) - Google Analytics