1. 关于字节序的问题:
在ActionScript下默认的字节序都为BIG_ENDIAN, 也就是传说中的大字节序。
字节序:
简言之,大字节序:也就是高位在高地址内存处,低位在低地址内存处。
小字节序: 与大字节序相反,低位存储在低地址内存处,高位存储在高地址内存处。
例如: int k = 256;
VC下为小字节序,即LITTLE_ENDIAN 它在VC下内存中按如下格式存储:00 01 00 00 也即低位在低地址内存处。高位在高地址内存处。
AS下一切的数据结构和数据类型默认为大字节序,所以在AS中k的存储方式如下:00 00 01 00
因此在VC和AS之间进行通信的时候需要进行字节序的转换。
网络字节序为高端字节序。AS与网络字节序相同,网络字节序一般认为是标准字节序。
2. 关于汉字的传输:
在VC下,字符串多数时候使用的为 MultiByte类型。与其相对有一个Unicode类型,也就是现在通用的编码类型。在编码汉字的时候,他们有一个区别,也就是:MultiByte类型编码,将一个汉字编码成为两个字节;而Unicode编码类型,将一个汉字编码为3个字节。
在AS下可以读取MultiByte类型数据,也可以读取Unicode类型数据。在与VC进行通信的时候,需要注意发送端发送的编码类型。
使用AS的Socket通信时需要注意:使用ByteArray存储接受和发送的数据时,有两个函数可以将汉字转化为字节。
socket.writeMultiByte( value:String, codeType:String); //第二个参数为编码的类型有gb2312、hz-gb-2312等
socket.writeUTFBytes( value:String); // 它默认的是使用Unicode编码方式(UTF-8)
我的应用为:
服务器(VC)发送中文,使用默认的编码方式,也就是MultiByte。如char str[] = "郭";
客户端(AS)接受中文,使用readMultiByte();函数,编码方式使用的"gb2312"
通信正常。
注:使用readUTFByte();函数读取则是乱码,因为它读取了三个字节。导致其后的数据读取也出现错误。
By Andy 2012-07-21 23:06