ASCII到二进制转换?

时间:2017-01-10 15:54:23

标签: c++ ascii

我正在读取ASCII文件并尝试将其转换为二进制文件。

我的代码是这样的:

void AtoB(char * input)
{
 int ascii; 
int length = strlen(input);

for(int x=0;x<length;x++) 
{
    ascii = input[x];

这里当我从文件中读取单个字符时,例如È,通过行`ascii = input [x];

我得到的值是-56 [如果ascii类型是int]和ascii = 4294967240 [如果ascii类型是unsigned int]并且基于此我的输出也在改变。我在这里引用ASCII表:{{3} } ,仍然无法理解这些是什么价值,以及在什么基础上分配给角色È

注意:我在Win 7 64bit上使用Visual Studio 2010来编写此代码(这可能无关紧要,仍然提供此注释)。编码是ANSI。

有人可以帮我理解这个吗?感谢。

http://www.simotime.com/asc2ebc1.htm

2 个答案:

答案 0 :(得分:3)

È不是ASCII个字符。我们假设文件实际上是使用cp1252 [1] 编码的。

使用cp1252编码的

ÈC8(十六进制)。

如果将C8解释为无符号的8位整数,那么它就是200。

如果您将C8解释为带符号的8位整数,那么它就是-56。

如果将C8解释为带符号的8位整数,则将其扩展为带符号的32位整数,然后将其转换为无符号的32位整数,它是4294967240。

所以你有预期的价值;你只是以不同的方式解释它。

  1. 用于在LPCTSTR未定义的构建中进行系统调用(对系统调用的LPTSTRUNICODE参数的编码)的编码称为&# 34; ANSI&#34;编码。实际编码因机器而异。然而,&#34; ANSI&#34;编码(大多数?全部?)英语Windows机器是cp1252。

答案 1 :(得分:2)

根据您的表格,È为二进制11001000 签署char后,11001000将被解释为-56 如果它是无符号的,则值为200。

32位中的

-56是11111111111111111111111111001000,当被解释为无符号整数时为4294967240。