Android 发送十六进制byte的问题

问题描述
我需要在Android上把一串十六进制字符串通过3G网络发给pc做处理
发送的jni接口是发送string类型,而我得到的是string类型十六进制的字符串  所以我发送时候做了以下处理
byte[] send_to_pc_buf = new byte[100];

String ab ="0012234567EA5E7D45BFFA";

int j = 0;

for(int i=0;i<ab.length();i=i+2){

	send_to_pc_buf[j] = (byte) Integer.parseInt(ab.substring(i,i+2) ,16);

	j++;

}

send_to_pc_str = new String(send_to_pc_buf);

将得到的str调用jni接口发送 在发送端发现收到的数据有些问题
收到的数据:
查阅资料 Android byte型范围在0~127之间 所以大于127的数据都出错了,因为pc端必须接收的是16进制数据所以我需要修改Android发送程序,那我该怎么做呢 
还有Android段会发送大量的0x00数据但是在pc端接收到的都是c0 80这是为什么呢 需要Android端做什么修改呢?  解决方案1
可以用这个decodeToString函数转换。


public int hexToInt(byte b) throws Exception {

	if (b >= '0' && b <= '9') {

		return (int)b - '0';

	}

	if (b >= 'a' && b <= 'f') {

		return (int)b + 10 - 'a';

	}

	if (b >= 'A' && b <= 'F') {

		return (int)b + 10 - 'A';

	}

	throw new Exception("invalid hex");

}

public byte[] decodeToBytes(String hexString) {

	byte[] hex = hexString.getBytes();

	if ((hex.length % 2) != 0) {

		return null;

	}

	byte[] ret = new byte[hex.length / 2];

	int j = 0;

	int i = 0;

	try {

    	while (i < hex.length) {

    		byte hi = hex[i++];

    		byte lo = hex[i++];

    		ret[j++] = (byte)((hexToInt(hi) << 4) | hexToInt(lo));

    	}

	} catch (Exception e) {

		e.printStackTrace();

		return null;

	}

	return ret;

}

public String decodeToString(String hexString) {

	return new String(decodeToBytes(hexString));

}

转载于:https://www.cnblogs.com/hugangyan86/p/4027420.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值