十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一个unicode汉字占用2个字节,以70个汉字来算,那就是140个字节。
云州网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
短消息有可能会包含标点符号,会占一个字节。
估计题写错了哇byte与int的区别:
主要是存储空间的大小和取值范围不同。
byte占用1个字节存储空间,取值范围-128~127
int占用4个字节存储空间,取值范围-2的31次方~2的31次方-1
觉得你这几个方法都要改写吧。
通常协议操作绝不能用String作为交换格式。
多次转码。导致数据变形,
特别是“同步头(2B) 包类型(1B) 数据长度(2B) ”
这个数据从byte[] -String-byte[]多次转换,100%会导致数据变化。
通常只在byte[]上操作,改成
private byte[]getPackage();
private byte[] getHead(byte []);
sendMessage(byte[]);
这几个方法都改成byte[],不然即使强调硬扭弄对也有运气成分。
System.out.println("原head:"+Arrays.toString(head));
String t=new String(head,"GB2312")+"hello world";
System.out.println("合并gb文本:"+t);
System.out.println("还原的head:"+Arrays.toString(t.getBytes("gb2312")));
=========
原head:[85, -86, -32, -2, -36]
合并gb文本:U��hello world
还原的head:[85, 63, 63, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
用还原后,前5个字节中出现负值的都完全变化,即根本不能用String作为字节的交换格式。
回问被吞了?我也没看到..
public String byte2hex(byte[] bytes){
StringBuilder sb = new StringBuilder();
String tmp = null;
for(byte b: bytes){
//将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制
tmp = Integer.toHexString(0xFF b);
if(tmp.length() == 1){
tmp = "0" + tmp;
}
sb.append(tmp);
}
return sb.toString();
}
Android 字符串、byte数组与16进制数组间的转换
span style="font-family:SimSun;font-size:14px;"// 字符串转换成16进制文字列的方法
public String toHex(String str) {
String hexString="0123456789ABCDEF";
byte[] bytes=str.getBytes();
StringBuilder hex=new StringBuilder(bytes.length * 2);
for(int i=0;ibytes.length;i++) {
hex.append(hexString.charAt((bytes[i] 0xf0) 4)); // 作用同 n / 16
hex.append(hexString.charAt((bytes[i] 0x0f) 0)); // 作用同 n
hex.append(' '); //中间用空格隔开
}
return hex.toString();
}
//将16进制数组转换为字符串
public static String decode(String bytes) {
String hexString="0123456789ABCDEF";
ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
//将每2位16进制整数组装成一个字节
// for(int i=0;ibytes.length();i+=2)
// baos.write((hexString.indexOf(bytes.charAt(i))4 | hexString.indexOf(bytes.charAt(i+1))));
//将每3位(第3位为空格)中的前2位16进制整数组装成一个字节
for(int i=0;ibytes.length();i+=3) {
baos.write((hexString.indexOf(bytes.charAt(i))4 | hexString.indexOf(bytes.charAt(i+1))));
}
return new String(baos.toByteArray());
}/span
详细