读书人

怎么从内存获取机器码呢

发布时间: 2013-07-09 09:50:47 作者: rapoo

如何从内存获取机器码呢?
从unicode文本中获取一个汉字后,计算机首先得将其转换成二进制机器码来存贮在内存中,怎么从内存中获取这个字的二进制码呢?

#include <stdio.h>
void main(void)
{
FILE *fp;
fp=fopen("E:\\c\\大明.txt","r");
char cl;
do
{
cl = fgetc(fp);
//如何从内存获得文字的二进制码

}
while (cl != EOF);
fclose(fp);

}
内存 C 二进制 计算机 Unicode
[解决办法]
举例:
char c1 = '0xA6';
c1是不是二进制?
[解决办法]
1)C的方式
char c1 = '0xA6'
char s[65];//long long 64Bits,65个字符几乎可以表示任何整型数据的二进制了;
//char 是C中最短的整型数据了;
//VC6 以上:
printf("%s",itoa(c,s,2));//输出整型的二进制,8~32Bits都可以这样用。
2)C++:
char c1 = '0xA6'
bitset<8> b(c1);//c1最多8Bits
cout<<b.tostring()<<endl;//输出字符串形式。

PS:
二进制形式数据太长,通常会把二进制数,用16进制表示;
1个16进制数字,用一个字符,代表4Bits数据。

很方便的,早期有用8进制表示的;现在一般都是16进制。

一个char类型数据:
用16进制表示,只需要2个字符。
10进制要3个字符;
2进制8个字符;
字符本身是计算机内部编码的二进制数据;
内部二进制数据1个字符;
占用一个字节,一共8个Bits。

所以计算机可表示的数据,内部都是二进制编码的;
所以不管哪一种进制表示,在计算机中都是二进制的;
只是这种二进制人是很难识别的;
于是就有各种进制的字符串表示;这是人可以直接识别的数据。

数据输出也是要转换成,各种进制的字符串表示来输出。
于是我们就看到了数据的16进制形式。这是人和计算机都很容易识别的形式。
于是我们就看到了数据的10进制形式。这是人最容易识别的形式。
于是我们就看到了数据的8进制形式。早期的一种数据表示方法。

于是我们就看到了数据的2进制形式。这是计算机内部表示的显化,人可以识别的二进制格式。
这种情况不是类型转换,而是数据的表示方法的转换,数据格式的转换。

类型转换是把一种格式的数据,看做另一种格式的数据使用。
(type)这是C的类型转换,例如
char c='0';
int t =(int)c;
C++有四个类型转换运算符
static_cast<type>() //静态类型转换,内部类型直接转换。
double y=10; int n= static_cast<int>(y);
const_cast<type>() //常量属性转换,去掉指针的 const 或者volatile属性
dynamic_cast<type>() //向下类型转换,父类转子类指针。
reinterpret_cast<type>()//任意类型指针的转换,不包括const_cast 可以转换的内容,这是一种不可移植的转换。

类型转换不是一种格式转换,只是一种类型替换;

整型,浮点型转字符串,是一种数据格式的转换。

这不是同一种转换。








[解决办法]

#include <stdio.h>
#include <stdlib.h>
void main() {
FILE *fp;
int cl;
char bs[33];
char b[33];

fp=fopen("E:\\c\\大明.txt","rb");
if (fp) {
while (1) {
cl = fgetc(fp);
if (EOF==cl) break;
_itoa(cl,b,2);
sprintf(bs,"%032s",b);
printf("%s ",bs+24);
}
fclose(fp);
} else {
printf("Can not open file E:\\c\\大明.txt\n");
}
}

读书人网 >C语言

热点推荐