如何将动作脚本3转换为c#?

时间:2014-04-21 12:47:58

标签: c# actionscript-3

所有

我正在尝试使用C#解析一些二进制(AMF3)数据。

我从https://code.google.com/p/cvlib/source/browse/trunk/as3/com/coursevector/amf/AMF3.as

找到了一些有用的类和函数

它下面有一个静态函数。

class UUIDUtils {

    private static var UPPER_DIGITS:Array = [
        '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
        ];

    public static function fromByteArray(ba:ByteArray):String {
        if (ba != null && ba.length == 16) {
            var result:String = "";
            for (var i:int = 0; i < 16; i++) {
                if (i == 4 || i == 6 || i == 8 || i == 10) result += "-";

                result += UPPER_DIGITS[(ba[i] & 0xF0) >>> 4];
                result += UPPER_DIGITS[(ba[i] & 0x0F)];
            }
            return result;
        }

        return null;
    }
}

它看起来像Java,但它不是。

我认为它是动作脚本3。

无论如何,我来到这里是为了将其转换为C#。

所以我的代码如下所示。

static string[] UPPER_DIGITS = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };

static string FromAMF3ByteArray(byte[] ba)
{
    if (ba != null && ba.Length == 16) {
        string result   = "";
        for (int i = 0; i < 16; i++)
        {
            if (i == 4 || i == 6 || i == 8 || i == 10)
                result += "-";

            result += UPPER_DIGITS[(ba[i] & 0xF0) >>> 4];
            result += UPPER_DIGITS[(ba[i] & 0x0F)];
        }
        return result;
    }

    return null;
}

但是我得到语法错误结果+ = UPPER_DIGITS [(ba [i]&amp; 0xF0)&gt;&gt;&gt; 4];

任何人都可以给我一些关于&gt;&gt;&gt;的建议?

1 个答案:

答案 0 :(得分:0)

>>>是ActionScript中的bitwise unsigned right shift运算符。当应用于无符号类型(byte,uint,ulong)时,它等效于C#中的right-shift operator。请在下面找到正确的翻译:

private static string FromAMF3ByteArray(byte[] ba)
{
    if (ba != null && ba.Length == 16)
    {
        string result = "";
        for (int i = 0; i < 16; i++)
        {
            if (i == 4 || i == 6 || i == 8 || i == 10) result += "-";

            result += UPPER_DIGITS[(ba[i] & 0xF0) >> 4];
            result += UPPER_DIGITS[(ba[i] & 0x0F)];
        }
        return result;
    }

    return null;
}