1.用netty給設備發送報文
/*
obj:byte數組
*/
private void writeMessage(ChannelHandlerContext ctx, byte[] obj) {
ByteBuf bufff = Unpooled.buffer();//netty需要用ByteBuf傳輸
bufff.writeBytes(obj);//對接需要16進制
ctx.writeAndFlush(bufff).addListener(new ChannelFutureListener() { //獲取當前的handle
@Override
public void operationComplete(ChannelFuture future) throws Exception {
StringBuilder sb = new StringBuilder("");
if (future.isSuccess()) {
log.info(sb.toString() + "回寫成功.");
} else {
log.error(sb.toString() + "回寫失敗.");
}
}
});
}
2.將16進制字符轉換爲字節
//將16進制的字符串轉成字符數組
public static byte[] getHexBytes(String str) {
str = str.replaceAll(" ", "");
byte[] bytes = new byte[str.length() / 2];
for (int i = 0; i < str.length() / 2; i++) {
String subStr = str.substring(i * 2, i * 2 + 2);
bytes[i] = (byte) Integer.parseInt(subStr, 16);
}
return bytes;
}
3.將16字節數組進制轉換爲字符
//將16進制的byte數組轉換成字符串
public static String getBufHexStr(byte[] raw) {
String HEXES = "0123456789ABCDEF";
if (raw == null) {
return null;
}
final StringBuilder hex = new StringBuilder(2 * raw.length);
for (final byte b : raw) {
hex.append(HEXES.charAt((b & 0xF0) >> 4))
.append(HEXES.charAt((b & 0x0F)));
}
return hex.toString();
}