【问题标题】:Actionscript ByteArray (from NFC) to StringActionscript ByteArray(来自 NFC)到字符串
【发布时间】:2012-06-16 17:50:45
【问题描述】:

我正在我的 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 向/从服务器发送数据时所做的。

提前感谢您的任何意见。

【问题讨论】:

    标签: actionscript air bytearray


    【解决方案1】:

    你甚至可以通过简单地调用来简化这段代码

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

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

    【讨论】:

      【解决方案2】:

      在下面的代码中弄清楚了。 有 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”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多