Netty傳輸16進制報文

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();
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章