Я работаю над проектом шины CAN и пытаюсь отправить сообщение, чтобы установить время и дату. Я выяснил, как сообщение должно быть отформатировано, взял дату/время и сохранил в переменных. Я отлично преобразовал их в шестнадцатеричный формат, но мне нужно добавить начальные 0, чтобы дополнить необходимое пространство, требуемое сообщением.
Я пробовал методы, найденные в Интернете, для сценария bash, но у меня есть проблема: 2019 год — это 7E3 в шестнадцатеричном формате. Мне нужно, чтобы это отображалось как 07E3. При использовании awk для добавления начальных нулей 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"