如何让mosquitto_sub显示二进制消息时为字节添加间隔?
解决mosquitto_sub二进制消息字节间添加空格的问题
问题描述
使用mosquitto_sub的%x格式符输出二进制消息时,字节之间无分隔空格,输出示例:
paul@desktop:~$ mosquitto_sub -t out -F '%x' -v 3031320033340035 3031320033340035
尝试用%3x格式符实现字节分隔,结果却出现消息截断:
paul@desktop:~$ mosquitto_sub -t out -F '%3x' 30 30
目标是得到每个十六进制字节用空格分隔的输出,例如:30 31 32 00 33 34 00 35
解决方案
mosquitto_sub的内置格式符不支持直接为十六进制字节添加空格,可通过管道结合文本处理工具实现:
方法1:用sed处理连续十六进制字符串
将%x输出的无空格十六进制串,每两个字符后插入空格,再移除行尾多余空格:
mosquitto_sub -t out -F '%x' | sed 's/../& /g; s/ $//'
方法2:用awk逐字节截取格式化
通过循环遍历字符串,每两个字符截取一次并添加空格:
mosquitto_sub -t out -F '%x' | awk '{for(i=1;i<=length($0);i+=2) printf "%s ", substr($0,i,2); print ""}'
保留主题信息的版本
如果需要同时显示消息主题(对应原命令的-v参数效果),可以用以下命令:
mosquitto_sub -t out -v | awk '{split($0, arr, " "); printf "%s ", arr[1]; for(i=1;i<=length(arr[2]);i+=2) printf "%s ", substr(arr[2],i,2); print ""}'
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

