日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)

發(fā)布時(shí)間:2023/12/6 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解析:

首先是讀取字節(jié):

/*** 讀取輸入流中指定字節(jié)的長(zhǎng)度

*

* 輸入流

*

*@paramlength 指定長(zhǎng)度

*@return指定長(zhǎng)度的字節(jié)數(shù)組*/

public static byte[] readBytesFromTo(byte[] buffer, int from, intlength) {byte[] sub = new byte[length];int cur = 0;for (int i = from; i < length + from; i++) {

sub[cur]=buffer[i];

cur++;

}returnsub;

}

讀取之后轉(zhuǎn)為字符串或者整型:

/*** byte[]轉(zhuǎn)int

*

*@parambytes 報(bào)文

*@returnInteger*/

public static int byteArrayToInt(byte[] bytes) {int value = 0;//由高位到低位

for (int i = 0; i < 4; i++) {int shift = (4 - 1 - i) * 8;

value+= (bytes[i] & 0x000000FF) << shift;//往高位游

}returnvalue;

}/*** 字節(jié)轉(zhuǎn)字符串

*@parambytes 報(bào)文*/

public static String byteArrayToString(byte[] bytes,int start , int end){return newString(bytes, start, end);

}

發(fā)送報(bào)文:

將java類型轉(zhuǎn)化為二進(jìn)制:

/***@parami

*@return

*/

public static byte[] intToByteArray(inti) {byte[] result = new byte[4];

result[0] = (byte) ((i >> 24) & 0xFF);

result[1] = (byte) ((i >> 16) & 0xFF);

result[2] = (byte) ((i >> 8) & 0xFF);

result[3] = (byte) (i & 0xFF);returnresult;

}/***

*@params

*@return

*/

public static byte[] StringToByteArray(String s) {returns.getBytes();

}

整合二進(jìn)制數(shù)組:

/***

*@parambytes

*@return

*/

public static byte[] combineByte(byte[] ... bytes){int length = 0;for (byte[] b : bytes) {

length+=b.length;

}byte[] allByte=new byte[length];int positon=0;for (byte[] b : bytes) {

System.arraycopy(b,0, allByte, positon, b.length);

positon+=b.length;

}returnallByte;

}

求校驗(yàn)和:

/***

*@paraminput

*@return

*/

public static int getCheckSum(byte[]... input) {int re = 0;for (byte[] b : input) {for (byteaB : b) {

re+= aB & 0x0FF;//注意此處要轉(zhuǎn)化為無符號(hào)

}

}returnre;

}

二進(jìn)制內(nèi)容有時(shí)候要在不同的環(huán)境下解析和發(fā)送,下面是C++和java的字符差異

下面給出在不同字符集編碼下的字節(jié)數(shù):

英文字母:

字節(jié)數(shù) : 1;編碼:GB2312 ? ? ? ? ? ? 字節(jié)數(shù): 1;編碼:GBK??????????? 字節(jié)數(shù) : 1;編碼:GB18030

字節(jié)數(shù) : 1;編碼:ISO-8859-1 ? ? ? ?字節(jié)數(shù): 1;編碼:UTF-8???????? 字節(jié)數(shù) : 4;編碼:UTF-16

字節(jié)數(shù) : 2;編碼:UTF-16BE?????????? 字節(jié)數(shù): 2;編碼:UTF-16LE

中文漢字:

字節(jié)數(shù) : 2;編碼:GB2312????????????? 字節(jié)數(shù): 2;編碼:GBK??????????? 字節(jié)數(shù) : 2;編碼:GB18030

字節(jié)數(shù) : 1;編碼:ISO-8859-1??????? 字節(jié)數(shù): 3;編碼:UTF-8???????? 字節(jié)數(shù) : 4;編碼:UTF-16

字節(jié)數(shù) : 2;編碼:UTF-16BE?????????? 字節(jié)數(shù): 2;編碼:UTF-16LE

編碼不同會(huì)影響解析的方式的差異,有時(shí)候還是蠻頭疼的,比如我們常用的中文問題,C++默認(rèn)用GB2312編碼,所以java的解析要變一下:

String describe = new String(bytes, start += 4, describeLength, Charset.forName("GB2312"));

總結(jié)

以上是生活随笔為你收集整理的java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。