konusundaki sorun nedir ve şimdi Flash Actionscript 3.0 geliştirme işlemini yapıyorum, encodeByteArray (...) ve decodeToByteArray (...) işleviyle bir Base64bitEncoder sınıfı var. ancak aşağıdaki kodları yazdığımda, kodlamadan önce ve kod çözme işleminden sonra byteArray.length, nerede yanlış olduğumu görmeye yardımcı olabilir misiniz? aşağıdaBase64bitEncoder.decodeToByteArray
Testi Örnek Kod: aşağıdaki gibi
var _loc_2:XML = new XML("<formXML>aaaaa</formXML>");;
var _loc_3:ByteArray;
_loc_3 = new ByteArray();
//_loc_3.endian = Endian.LITTLE_ENDIAN;
_loc_3.writeUTFBytes(_loc_2);
trace("Before Encoding Length:" + _loc_3.length);
var baseString:String = Base64bitEncoder.encodeByteArray(_loc_3);
trace(baseString);
var strArray:ByteArray = Base64bitEncoder.decodeToByteArray(baseString);
trace("After Decoding length:" + strArray.length);
Çıktı günlüğü:
Before Encoding Length:5
GFhAGFhA
After Decoding length:**6**
Neden yanlış yaptıktan sonra is 6,? aşağıda
Base64bitEncoder kaynak kodu:
package
{
import flash.utils.*;
public class Base64bitEncoder extends Object
{
private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=";
private static const BASE64_URL_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_!";
public function Base64bitEncoder()
{
return;
}// end function
public static function encode(param1:String, param2:Boolean = false) : String
{
var _loc_3:ByteArray;
_loc_3 = new ByteArray();
_loc_3.writeUTFBytes(param1);
return encodeByteArray(_loc_3, param2);
}// end function
public static function decodeToByteArray(param1:String, param2:Boolean = false) : ByteArray
{
var _loc_3:ByteArray;
var _loc_4:Array;
var _loc_5:Array;
var _loc_6:uint;
var _loc_7:uint;
var _loc_8:uint;
_loc_3 = new ByteArray();
_loc_4 = new Array(4);
_loc_5 = new Array(3);
_loc_6 = 0;
while (_loc_6 < param1.length)
{
// label
_loc_7 = 0;
while (_loc_7++ < 4 && _loc_6 + _loc_7 < param1.length)
{
// label
_loc_4[_loc_7] = param2 == true ? (BASE64_URL_CHARS.indexOf(param1.charAt(_loc_6 + _loc_7))) : (BASE64_CHARS.indexOf(param1.charAt(_loc_6 + _loc_7)));
}// end while
_loc_5[0] = (_loc_4[0] << 2) + ((_loc_4[1] & 48) >> 4);
_loc_5[1] = ((_loc_4[1] & 15) << 4) + ((_loc_4[2] & 60) >> 2);
_loc_5[2] = ((_loc_4[2] & 3) << 6) + _loc_4[3];
_loc_8 = 0;
while (_loc_8++ < _loc_5.length)
{
// label
if (_loc_4[_loc_8 + 1] == 64)
{
break;
}// end if
_loc_3.writeByte(_loc_5[_loc_8]);
}// end while
_loc_6 = _loc_6 + 4;
}// end while
_loc_3.position = 0;
return _loc_3;
}// end function
public static function encodeByteArray(param1:ByteArray, param2:Boolean = false) : String
{
var _loc_3:String;
var _loc_4:Array;
var _loc_5:Array;
var _loc_6:uint;
var _loc_7:uint;
var _loc_8:uint;
_loc_3 = "";
_loc_5 = new Array(4);
param1.position = 0;
while (param1.bytesAvailable > 0)
{
// label
_loc_4 = [];
_loc_6 = 0;
while (_loc_6++ < 3 && param1.bytesAvailable > 0)
{
// label
_loc_4[_loc_6] = param1.readUnsignedByte();
}// end while
_loc_5[0] = (_loc_4[0] & 252) >> 2;
_loc_5[1] = (_loc_4[0] & 3) << 4 | _loc_4[1] >> 4;
_loc_5[2] = (_loc_4[1] & 15) << 2 | _loc_4[2] >> 6;
_loc_5[3] = _loc_4[2] & 63;
_loc_7 = _loc_4.length;
while (_loc_7++ < 3)
{
// label
_loc_5[_loc_7 + 1] = 64;
}// end while
_loc_8 = 0;
while (_loc_8++ < _loc_5.length)
{
// label
_loc_3 = _loc_3 + (param2 == true ? (BASE64_URL_CHARS.charAt(_loc_5[_loc_8])) : (BASE64_CHARS.charAt(_loc_5[_loc_8])));
}// end while
}// end while
return _loc_3;
}// end function
public static function decode(param1:String, param2:Boolean = false) : String
{
var _loc_3:ByteArray;
_loc_3 = decodeToByteArray(param1, param2);
return _loc_3.readUTFBytes(_loc_3.length);
}// end function
}
}
:
güncelleme kodu Bir Base64bitEncoder sınıf var ... "Ben Flaş AS3 do ... Ben test kodunun altına yazmak ... Ben yanlış ... Yanlış yapıyorum "... ama dediğin gibi, gerçekten yanlış yapıyorsun! Kendi kodunuzu yazmaya çalışın, eğer problemleriniz varsa, onları buraya gönderin ve kesinlikle yardım alacaksınız, fakat başkalarının kodunu kullanırken değil! – akmozo
@akmozo, Evet, haklısınız, Base64bitEncoder sınıf kodu benim tarafımdan geliştirilmiyor, sadece ona başvuruyorum. Ancak, Base64 ile aşina olmadığım için, decodeByteArray yönteminde bir sorun olabileceğini fark ettim, bu nedenle, Master'ın sorunun nerede olduğunu gösterip gösteremeyeceğini görmek için buradaki kodu geçtim. Teşekkürler. –
Sorununuz AS3'te Base64 veya sadece bu kod ile mi? Bunu yapmak için pek çok [AS3 kitaplığı] vardır (http://stackoverflow.com/questions/6625347/best-class-for-base64-encoding-decoding-action-script) (ve bunların çoğu açık kaynaktır). . – akmozo