信息就是位加上下文,位(数据)符号化的东西,上下文就是确定其表示方式,它可能代表一个数字,也可能表示一个字符,也可能表示其它东西,具体要看其映射方式。在中国这个Windows版本,大多编译器会默认采用Windows 代码页 936(中文简体)这个字符编码,其中ASCII代表一个字节,宽字符(汉字)代表2个字节。这样似乎节省了一些空间(这可能也是微软采用代码页的原因),但在编程时会带来附加的麻烦。当然也可以统一使用Unicode,浪费了一小部分空间,但更简单(具体请参见Windows 程序设计第5版 第二章)。
在LZ遇到的问题中就需要进行上下文转换,C标准IO库里面已经提供了一些上下文转换的函数。
。。。。。 03003200 09008001 ffff0000 00000000 00000000 00000000 00800000
^这里要有一个空格,因为要略过这些字符而不使用正则表达式
好了,代码如下:
程序代码:
#include <stdio.h>
int main(void)
{
char str[100];
FILE * fp = fopen("filename", "r");
fscanf(fp, "%*s%2x%2x", str + 36, str + 37);
printf("%x", *(short *)(str + 36)); // 不出意外short应该为2字节
return 0;
}
IA32 Little Endian的平台下会输出3,Big Endian会输出12c。
[
本帖最后由 lz1091914999 于 2011-8-23 20:23 编辑 ]