我正在做一个 CAN 总线项目,并尝试发送一条消息来设置时间和日期。我已经弄清楚了消息需要如何格式化、获取日期/时间并存储在变量中。我已经将它们转换为十六进制就好了,但是我需要添加前导 0 来填充消息所需的空间。
我已经尝试过网上看到的 bash 脚本方法,但我有一个问题:2019 年是 7E3 十六进制。我需要将其显示为 07E3。当使用 awk 添加前导 0 时,E3 被解释为工程符号 *10^3,因此打印为 7000。下面是我的脚本,以及显示 CAN 总线消息格式的图像。任何帮助表示赞赏。
#!/bin/bash
#Store Date/Time in Variables
Year=`date '+%Y'`
Month=`date '+%m'`
Day=`date '+%d'`
Hour=`date '+%H'`
Minute=`date '+%M'`
Second=`date '+%S'`
#Convert Date/Time to Hexadecimel
HexYear=`echo "ibase=10;obase=16;$Year"| bc | awk '{ printf("%04d\n", $1) }'`
HexMonth=`echo "ibase=10;obase=16;$Month"| bc | awk '{ printf("%02d\n", $1) }'`
HexDay=`echo "ibase=10;obase=16;$Day"| bc | awk '{ printf("%02d\n", $1) }'`
HexHour=`echo "ibase=10;obase=16;$Hour"| bc | awk '{ printf("%02d\n", $1) }'`
HexMinute=`echo "ibase=10;obase=16;$Minute"| bc | awk '{ printf("%02d\n", $1) }'`
HexSecond=`echo "ibase=10;obase=16;$Second"| bc | awk '{ printf("%02d\n", $1) }'`
echo "The following is Decimel > Hex"
echo "$Year > $HexYear"
echo "$Month > $HexMonth"
echo "$Day > $HexDay"
echo "$Hour > $HexHour"
echo "$Minute > $HexMinute"
echo "$Second > $HexSecond"