1

我有一个使用旧版本的 flex sdk 编写和编译的应用程序。现在我必须移植这个应用程序以在移动设备上运行,所以我将 sdk 更改为 air sdk 3.5。我正在使用 hurlant 库进行加密/解密。bu 在 Hex 类上有一行会引发错误。

    if (hex.length&1==1) hex="0"+hex;

我不知道 (hex.length&1==1) 是什么意思。那么我应该如何更改线路或者是否有任何其他解决方案可以解决该问题?

4

3 回答 3

4

我也看到过这个错误,它发生在您使用 Flash Builder 4.7 的新 ASC2.0 编译器编译时。

我变成 if (hex.length&1==1) hex="0"+hex;

 if ((hex.length&1)==1) hex="0"+hex;

并修复了它。

于 2013-03-11T21:12:25.843 回答
0

if(hex.length&1==1)表示检查 hex.length 是否为奇数(1,3,5,7...)。

参考如下:

var str:String = "111";

if(str.length&1==1)
{
   str = "0" + str;

   trace(str);
}

你的语法没问题。我确定。显示什么样的错误?

我有一个Hex.as. 但没有发生任何语法错误。在 Flash Builder 4.6 中,Flash CS6 AIR3.5。

package com.hurlant.util
{
    import flash.utils.ByteArray;

    public class Hex
    {
        /**
         * Support straight hex, or colon-laced hex.
         * (that means 23:03:0e:f0, but *NOT* 23:3:e:f0)
         * Whitespace characters are ignored.
         */
        public static function toArray(hex:String):ByteArray {
            hex = hex.replace(/\s|:/gm,'');
            var a:ByteArray = new ByteArray;
            if (hex.length&1==1) hex="0"+hex;
            for (var i:uint=0;i<hex.length;i+=2) {
                a[i/2] = parseInt(hex.substr(i,2),16);
            }
            return a;
        }

        public static function fromArray(array:ByteArray, colons:Boolean=false):String {
            var s:String = "";
            for (var i:uint=0;i<array.length;i++) {
                s+=("0"+array[i].toString(16)).substr(-2,2);
                if (colons) {
                    if (i<array.length-1) s+=":";
                }
            }
            return s;
        }

        /**
         * 
         * @param hex
         * @return a UTF-8 string decoded from hex
         * 
         */
        public static function toString(hex:String):String {
            var a:ByteArray = toArray(hex);
            return a.readUTFBytes(a.length);
        }


        /**
         * 
         * @param str
         * @return a hex string encoded from the UTF-8 string str
         * 
         */
        public static function fromString(str:String, colons:Boolean=false):String {
            var a:ByteArray = new ByteArray;
            a.writeUTFBytes(str);
            return fromArray(a, colons);
        }

    }
}
于 2013-03-11T12:24:11.480 回答
0

您将需要弹性和空气!
对我来说看起来像是一个错字..

if (hex.length==1) hex="0"+hex;

取决于 if 语句应该查找的内容

编辑我的坏
我不知道那个运算符,我会用模数来做的!
我向你高超的技能低头。

于 2013-03-11T11:47:31.887 回答