Neo*_*ash 2 bytearray actionscript-3
我试图了解ByteArray中空字节的重要性。他们扮演终结者的角色吗?我的意思是,一旦写入空字节,就不能进一步写入ByteArray吗?
例如,
import flash.utils.*;
public class print3r{
public function print3r{
Util.print(nullout());
}
public function nullout:ByteArray (){
var bytes:ByteArray = new ByteArray();
bytes.writeInt(((403705888 + 1) - 1)); // Non Printable Characters
bytes.writeInt(((403705872 - 1) + 1)); // Non Printable Characters
bytes.writeInt(0x18101000); // Notice the NullByte in this DWORD
bytes.writeInt(0x41424344); // ASCII Characters ABCD
return bytes;
}
}
new print3r;
Run Code Online (Sandbox Code Playgroud)
这给出空白输出。
现在,如果我将DWORD 0x18101000替换为0x18101010,这一次我可以在输出中看到ASCII填充ABCD。
我的问题是,是否可以将空字节写入ByteArray()中?
我问的原因是因为我已经在ActionScript代码中看到,即使在写入空字节之后,也对ByteArray执行了许多writeInt和writeByte操作。
谢谢。
是否有可能将空字节后的内容写入ByteArray()?
当然是这样。ByteArray
-是大量原始数据。您可以在此处编写任何内容,也可以以您喜欢的任何方式进行读取(使用零字节作为分隔符,也可以执行其他任何操作)。
使用将字节发送到标准输出时所看到的内容trace()
仅取决于您实际对数据进行转换以将其转换为字符串的方式。有几种将字节数组转换为字符串的方法。因此,您的问题缺少对哪种Util.print()
方法的解释。
以下是将字节转换为字符串的几个选项:
ByteArray.readUTFBytes()
。trace(byteArray);
。此方法忽略零字节,并输出其余字节。此方法使用System.useCodePage
设置来决定编码,如果数据以其开头,则可以使用UTF BOM。以下是一些说明上述内容的测试:
var test:ByteArray = new ByteArray();
// latin (1 byte per character)
test.writeUTFBytes("ABC");
// zero byte
test.writeByte(0);
// cyrillic (2 bytes per character)
test.writeUTFBytes("\u0410\u0411\u0412");
trace(test); // ABC???
trace(test.toString()); // ABC???
test.position = 0;
trace(test.readUTFBytes(test.length)); // ABC
// simple loop
var output:String = "";
var byte:uint;
for (var i:uint = 0; i<test.length; i+=1) {
byte = uint(test[i]);
if (output.length && i%4 == 0) {
output += " ";
}
output += (byte > 0xF ? "" : "0") + byte.toString(16);
}
trace(output); // 41424300 d090d091 d092
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1780 次 |
最近记录: |