0

我正在我的 Adob​​e AIR 移动应用程序中读取 NFC 标签。数据被读取为 ByteArray,但我很难提取全文。标记上的示例文本是“http://www.google.com”

使用这种方法,我得到了字符串“http://www.goog”的一部分,但不是全部。我假设因为每个字符都不是一个字节:

private static function convertToString(byte_array : ByteArray) : String {
        var arr : Array = [];
        for (var i : Number = 1 ; i <= byte_array.bytesAvailable; i++) {
            arr.push(byte_array.readUTFBytes(i));
        }

        var finalString : String = "";
        for (var t : Number = 0; t < arr.length;t++) {
            finalString = finalString + arr[t].toString();
        }

        return finalString;
    }

我也试过下面的方法,但它返回null:

bytes.readUTF();

我想知道是否需要将 byteArray 转换为 base64 字符串,然后对其进行解码。这似乎是一个额外的步骤,但这就是我之前使用 AMFPHP 向/从服务器发送数据时所做的。

提前感谢您的任何意见。

4

2 回答 2

1

您甚至可以通过简单地调用来简化此代码

private static function convertToString(bytes:ByteArray):String {
    bytes.position = 0;
    var str:String = bytes.readUTFBytes(bytes.length);

    return str;
}

这样,您将通过一个方法调用将字节数组的所有内容读取到目标字符串中。

于 2012-06-14T04:35:51.687 回答
0

在下面的代码中弄清楚了。有 2 个错误,还有一些清理:

    private static function convertToString(bytes : ByteArray) : String {
        bytes.position = 0;
        var str : String = '';
        while (bytes.bytesAvailable > 0) {
            str += bytes.readUTFBytes(1);
        }
        return str;
    }
  • 当您从 ByteArray 中读取数据时,“bytesAvailable”属性会减少。在这里,我正在检查字节是否 > 0 而不是长度
  • “readUTFBytes”方法采用长度参数(不是位置)。当您从 ByteArray 中读取时,位置会自动更新。我传入“1”而不是“i”
于 2012-06-13T20:18:39.300 回答