发布时间:2019-08-25 09:37:41编辑:auto阅读(1261)
package com.game.common { import flash.utils.ByteArray; import flash.utils.Endian; /** * Unicode字符工具 * @author Kayer * */ public final class GameUnicodeTools { private static var ins : GameUnicodeTools; public static function get instance() : GameUnicodeTools { if (!ins) { ins = new GameUnicodeTools(); } return ins; } public function GameUnicodeTools():void { if( ins ) throw Error("GameUnicodeTools 类被设计成单例!"); } /**解析*/ public function decode( resBytes : ByteArray , len : uint ) : String { var bytes : ByteArray = new ByteArray(); bytes.endian = Endian.LITTLE_ENDIAN; // var surplusLen : uint = ( resBytes.length - resBytes.position + 1 > len ) ? len : resBytes.length - resBytes.position + 1; var surplusLen : uint = ( resBytes.length - resBytes.position > len ) ? len : resBytes.length - resBytes.position; bytes.writeBytes( resBytes , resBytes.position , surplusLen ); resBytes.position = resBytes.position + surplusLen - 1; // bytes.writeByte(0); // bytes.position = 0; return this.byArrayToString( bytes ); } /** * 加密</br> * str to unicodeBytes * */ public function encode( resStr : String , len : uint = 0 ):ByteArray { return this.StrToByteArray( resStr , ( len > 0 ) ? len : 0 ); } //unicode string to ByteArray private function StrToByteArray( strValue : String, uLen:uint = 0 ):ByteArray { var byAaryR:ByteArray = new ByteArray(); byAaryR.endian = Endian.LITTLE_ENDIAN; for ( var i:int = 0; i < strValue.length; ++i ) { byAaryR.writeShort(strValue.charCodeAt(i)); } for ( i = 0; i < (uLen - strValue.length); ++i ) { byAaryR.writeShort(0); } return byAaryR; } //ByteArray to unicode string private function byArrayToString( byArray:ByteArray ):String { byArray.position = 0; var strReturn:String = new String(); var strRep:String = ""; // var $cacthBytes : ByteArray = new ByteArray(); // $cacthBytes.endian = Endian.LITTLE_ENDIAN; var ss : uint = 0; for(var i:int = 0; i < Math.floor( byArray.length / 2 ) ; i += 1 ) { // $cacthBytes.clear(); // $cacthBytes.position = 0; ss = byArray.readShort(); if( ss == 0 ) { break; } else { byArray.position -= 2; if( ss <= 0xff ) { strRep = byArray.readMultiByte( 1 , "utf-8" ); byArray.position += 1; } else { strRep = byArray.readMultiByte( 2 , "unicode" ); } // strReturn = replaceAt(strReturn, strRep, i, i); strReturn += strRep; } } // var strRep:String = byArray.readMultiByte(byArray.length, "unicode"); return strReturn; } private function replaceAt(char:String, value:String, beginIndex:int, endIndex:int):String { beginIndex = Math.max(beginIndex, 0); endIndex = Math.min(endIndex, char.length); var firstPart:String = char.substr(0, beginIndex); var secondPart:String = char.substr(endIndex, char.length); return (firstPart + value + secondPart); } } }
上一篇: BGP学习 总结3
下一篇: openstack issue 3
46490
44380
35829
33387
28083
24649
23572
18787
18047
16733
4555°
5113°
4644°
4784°
5447°
4410°
4463°
5009°
4902°
6149°