And*_*ers 1 unicode encoding bytearray tostring actionscript-3
var bytes:ByteArray = new ByteArray;
bytes.writeInt(0);
trace(bytes.length); // prints 4
trace(bytes.toString().length); // prints 4
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码的输出表明,通过的toString返回的字符串中的每个字符包含从ByteArray的一个字节.如果你想发送的字符串和字符串事项的大小编码的内容当然,这是伟大的,如果你想显示ByteArray的内容,但没有那么大.
是否有可能得到其中字符串中的每个字符包含来自ByteArray的两个字节的ByteArray一个字符串?
你可以重新解释你ByteArray
只包含短裤.这使您可以一次读取两个字节,并获得一个代表它们的数字值.接下来,您可以将这些数字重新解释为字符代码.最后,String
从这些字符代码创建一个,你就完成了.
public static function encode(ba:ByteArray):String {
var origPos:uint = ba.position;
var result:Array = new Array();
for (ba.position = 0; ba.position < ba.length - 1; )
result.push(ba.readShort());
if (ba.position != ba.length)
result.push(ba.readByte() << 8);
ba.position = origPos;
return String.fromCharCode.apply(null, result);
}
Run Code Online (Sandbox Code Playgroud)
有一个特殊情况需要注意.如果你尝试从ByteArray
只剩下一个字节的时候读取短路,则会抛出异常.在这种情况下,您应该调用readByte
8位的值来代替.这与原始文件ByteArray
末尾有一个额外的0字节相同.(使其长度均匀)
现在,至于解码这个String ...获取每个角色的角色代码,并将它们放入一个新ByteArray
的短裤中.它将与原始版本相同,除非原始字节具有奇数个字节,在这种情况下,解码ByteArray
后的末尾将有一个额外的0字节.
public static function decode(str:String):ByteArray {
var result:ByteArray = new ByteArray();
for (var i:int = 0; i < str.length; ++i) {
result.writeShort(str.charCodeAt(i));
}
result.position = 0;
return result;
}
Run Code Online (Sandbox Code Playgroud)
在行动:
var ba:ByteArray = new ByteArray();
ba.writeInt(47);
ba.writeUTF("Goodbye, cruel world!");
var str:String = encode(ba);
ba = decode(str);
trace(ba.readInt());
trace(ba.readUTF());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11558 次 |
最近记录: |