所有
我正在尝试使用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;的建议?
答案 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;
}