ascii码与二进制码有何区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ascii码与二进制码有何区别?相关的知识,希望对你有一定的参考价值。

ascii码与二进制码有何区别?

一、发表时间不同

1、ascii码:ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

2、二进制码:现代的二进制记数系统由戈特弗里德·莱布尼茨于1679年设计。

二、用途不同

1、ascii码:主要用于显示现代英语和其他西欧语言。

2、二进制码:二进制的应用非常广泛,可以应用于各个方面,比如计算机科学,物理学等。

三、方式不同

1、ascii码:基于拉丁字母的一套电脑编码系统。

2、二进制码:用二进制记数系统,即以2为基数的记数系统表示的数字。

参考资料来源:

百度百科-二进制码

百度百科-ascii码

参考技术A ascii是美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。

而二进制是用一串01代码表示的数字,ascii代码又可以用8位的二进制代码表示本回答被提问者采纳
参考技术B ascii编码和二进制码是两个概念。ASCII主要是为了电脑显示和传输拉丁字母而发明的一套编码,二进制则是为了计算机方便计算、传输数据而使用的一种方法。
ASCII(American
Standard
Code
for
Information
Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC
646。

cin.get() ASCII 码与代码中已设置字符的 ASCII 码不同

【中文标题】cin.get() ASCII 码与代码中已设置字符的 ASCII 码不同【英文标题】:cin.get() ASCII code is different than ASCII code of already set char in code 【发布时间】:2012-07-26 19:14:33 【问题描述】:

cin.get() 有问题:

在获取 char 时,我将其转换为 int,但是当我通过控制台输入时,结果与已在代码中设置时不同。

示例如下:

int ord(unsigned char chr)
    int ret=int(chr);
    return ret;

int main()
    unsigned char chr='ň'; //This is my constant character 'ň' for now
    cout<<ord(chr)<<endl; //outputs : 242 ,which is alright for me, because it is same as in PHP and that I need
    chr=cin.get(); //now I change my constant character 'ň' to 'ň' written through console 
    cout<<ord(chr)<<endl; //outpus : 229 ,which is wrong for me, because its not same as in PHP 

我该如何解决这个问题?

我要的是 242,不是 229,它必须和 PHP 中 ord() 的结果一样。

【问题讨论】:

【参考方案1】:

源文件和控制台输入通过两个不同的过程来解释字符并将其转换为代码。第一个被输入文本编辑器并由编译器转换,第二个由操作系统和控制台库解释。

值 242 对应于 ISO/IEC 8859-2 或 Windows 1250 代码页中的字符。

我不确定值 229 的来源,但几乎可以肯定这是因为正在使用不同的代码页来为字符分配值。比如code page 852。

【讨论】:

我猜 229 字符来自在控制台窗口中使用 OEM 代码页 852。 @MichaelBurr,我自己才想出来的。这需要大量的试验和错误。这将被控制台窗口使用是有道理的。 我尝试了这个脚本来获取我的应用程序使用的字符集:cout @DieMeine,输入的编码不是由 C++ 语言环境决定的,而是由 Cmd 窗口决定的。有一个chcp 命令,但我不知道它的效果如何。 嗯,它有效,但只是部分。当我将 chcp 更改为 1250 并按键盘上的“ň”时,cin.get() 输出“˛”,但是当我将控制台输出 (˛) 标记并复制到此处时,它会粘贴 ň:D【参考方案2】:

问题是您的控制台正在从code page 852 读取字符,其中ň 在代码点229 (0xE5) 处编码,但您希望它的值在ISO 8859-2(又名Latin-2)中,其中@ 987654325@ 在代码点 242 (0xF2) 处编码。

我强烈建议您放弃这种方法并专门使用 Unicode,它不存在这些类型的问题。处理非 Unicode 编码(例如 ISO 8859 变体和 DOS 代码页)只会让人头疼。

要使用 Unicode 数据,see this question。在 Unicode 中,ň 是代码点 U+0148。

另外,这与您的问题无关,但您的 ord() 函数没用。 cin.get() 已经返回 int,并且 unsigned char 可以隐式转换为 int

【讨论】:

我尝试使用写在那里的 wstring 和 wchar_t,所以我将 cout 替换为 wcout,将 cin 替换为 wcin,还添加了这些标题,但结果仍然相同 - 229【参考方案3】:

问题是字符ň不是ASCII字符,因此没有ASCII码。

当给定一个非 ASCII 字符时,PHP ord() 和 C++ ord() 都承诺未定义的结果。

【讨论】:

以上是关于ascii码与二进制码有何区别?的主要内容,如果未能解决你的问题,请参考以下文章

BCD码和二进制码有啥区别

BCD码和二进制码有啥区别

请教BIN、BCD、二进制、ACSII码有啥区别,多谢

ASCII码与BCD码的区别

ascii码与unicode码的区别

二进制文件和ASCII文件有何区别