java的byte和C#的byte的不同之处

Java byte

java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,
byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。
在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]。

C# byte

c#的byte边界值为:0~255,
java的byte边界值为:-128~127。 当byte >=0 && byte <127时, 两边是相等的。

所以:java的byte转成C#可识别的byte时,如果byte<0, (byte+ 256) 即为C#可识别的byte。( 列个方程:java +256= C# 则 java = C#-256。 若满足条件 java<0,java>=-128 ,即 ( C#-256 < 0 && C#-256 >= -128 )
C#的byte转成java可识别的byte时,如果 byte >0 && byte<=127,可直接int转byte 。如果 byte >=128 则 javabyte = value - 256 。

 

java 转.net 

复制代码
byte javabit = -112;

int bit = Convert.ToInt32(javabit);
byte bt = new byte();
if (bit < 0)
{
var st = (bit + 256).ToString();
bt = byte.Parse(st);
}
else
{
bt = byte.Parse(bit.ToString());
}

var st =  Encoding.GetEncoding("UTF-8").GetString(bt);
复制代码

另一种写法 

复制代码
String s="helloWorld";
byte[] b = s.getBytes();// 按照指定编码将String编程字节数组
int total = 0;
int temp;
// java模拟c# byte
for (int i = 0; i < b.length; i++) {
    temp = b[i] & 0xff;
    if (total + temp <= 0xff) {
        total += temp;
    } else {
        total = total + temp - 1 - 0xff;
    }
}
复制代码

c# 转java 

复制代码
        /// <summary>
        /// 转换为单字节  java base64
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string JavaBase64(string str)
        {
            byte[] by = Encoding.UTF8.GetBytes(str);
            sbyte[] sby = new sbyte[by.Length];
            for (int i = 0; i < by.Length; i++)
            {
                if (by[i] > 127)
                    sby[i] = (sbyte)(by[i] - 256);
                else
                    sby[i] = (sbyte)by[i];
            }
            byte[] newby = (byte[])(object)sby;
            return Convert.ToBase64String(newby);
        } 
复制代码

另一种写法

复制代码
 public int[] BuildJava(byte[] buff)
        {
            List<int> list = new List<int>();
            for (int i = 0; i < buff.Length; i++)
            {
                // C#byte转java byte
                if (Convert.ToInt32(buff[i]) >= 0 && Convert.ToInt32(buff[i]) <= 127)
                {
                    list.Add(Convert.ToInt32(buff[i]));
                }
                else
                {
                    list.Add(Convert.ToInt32(buff[i]) - 256);
                }
            }
            int[] arr = list.ToArray();
            return arr;
        }
复制代码

在与java做通讯时(加密/解密 )遇到各种坑的,可以参考一下。

posted @   流氓大菠萝  阅读(760)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示