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做通讯时(加密/解密 )遇到各种坑的,可以参考一下。
标签:java,C#,int,127,128,byte From: https://www.cnblogs.com/daboluo/p/17202235.html