Java和C#中byte数据类型的转化

项目中需要用Java代码重写一部分使用C#实现的功能,其中一个函数用到byte数组作为参数,最终需要将byte数据转化为字符串类型,C#中的byte和Java中的byte取值范围不一样,Java中的取值范围为-128~127,C#中取值范围为0~255,所以不能直接进行转换。因为最终要通过二进制值进行转换为字符串,所以需要保证二者的二进制值是一样的。

具体做法是将C#中的byte数组转为二进制存入txt文档,形式如下:

Java读取文档中的二进制数据,再构造byte数组。但是直接调用Byte.parseByte()方法会报错,查看该方法的源代码如下:

public static byte parseByte(String s, int radix)
        throws NumberFormatException {
        int i = Integer.parseInt(s, radix);
        if (i < MIN_VALUE || i > MAX_VALUE)
            throw new NumberFormatException(
                "Value out of range. Value:\"" + s + "\" Radix:" + radix);
        return (byte)i;
    }

byte的类型转换是通过调用Integer.parseInt进行,MIN_VALUE和MAX_VALUE的值分别为-128和127,当获得的8位二进制值的第一位为1时,byte值应为负数,但用Integer不会转成负数,而是一个大于127的值,从而抛出异常。这应该是jdk的一个bug。只能自己来实现这个方法了:

private static byte convertToJavaByte(String str){
		
		byte result = 0;
		if(str.length() < 8){
			result = Byte.parseByte(str,2);
		}else if(str.length() == 8 && str.startsWith("1")){
			byte temp = Byte.parseByte(str.substring(1, str.length()-1),2);
			result = (byte) (0 - temp);
		}
		
		return result;
	}

该方法可以将二进制的字符串转换为合适的byte值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值