将java方法转换为C#:使用位移运算符将字节转换为整数
我试图将以下两种方法转换为c#而没有.net编译器向我抱怨。 坦率地说,我只是不明白这两种方法是如何真正在幕后工作的。 所以答案和解释在这里会很棒。
public static int bytesToInt(byte b0, byte b1, byte b2, byte b3) { return (((int)b0 << 24) & 0xFF000000) | (((int)b1 << 16) & 0x00FF0000) | (((int)b2 <>> 8) & 0x00FF); result[1] = (byte) ((c >>> 0) & 0x00FF); return result; }
第二种方法特别令人困惑,因为使用的移位算子与第一种方法不同。
在此先感谢您的帮助。
“>>>”是Java中的无符号右移运算符。 它可以替换为“>>”,然而,如果它是负数,则对值进行符号扩展。 但是,在这种情况下,使用“>>”运算符是无害的,因为结果会减少为单个字节的值( & 0x00FF
)。
在Java中,必须使用bytesToInt( & 0xFF000000
等)中的掩码,因为在Java中,字节是有符号值,也就是说,它们可以是正数或负数,转换为int
可以对负值进行符号扩展。 但是,在C#中,字节只能是正数,因此不需要屏蔽。 因此,bytesToInt方法可以简单地重写为:
return (((int)b0 << 24)) | (((int)b1 << 16)) | (((int)b2 << 8)) | ((int)b3);
您可以使用BitConverter
类在基本数据类型和字节数组之间进行转换。
重写bytesToInt()
方法如下所示:
public static int BytesToIntUsingBitConverter(byte b0, byte b1, byte b2, byte b3) { var byteArray = BitConverter.IsLittleEndian ? new byte[] { b3, b2, b1, b0 } : new byte[] { b0, b1, b2, b3 }; return BitConverter.ToInt32(byteArray, 0); }
并重写charToBytes()
方法将如下所示:
上述就是C#学习教程:将java方法转换为C#:使用位移运算符将字节转换为整数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
public static byte[] CharToBytesUsingBitConverter(char c) { byte[] byteArray = BitConverter.GetBytes(c); return BitConverter.IsLittleEndian ? new byte[] { byteArray[1], byteArray[0] } : byteArray; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955688.html