我可以用python或C或Java来做这件事,但经过谷歌点击的打击后,我无法开始如何使用脚本中的shell命令来做这件事。
背景:
我有一个(序列号)我需要转换成UTF16字符串,然后我会传递给一个实用程序(HEXMATE),它将把它插入一个Intel hex文件。内存中字符串的最终格式是USB字符串,即两个字节长度(LSB,MSB),然后所有字符串字符为UTF16字符(LSB,MSB)。该实用程序只接受一个字符串,它将按原样(加上null)插入给定的内存地址。因此,我需要使用转义将字符串长度嵌入到字符串的开头。
这在脚本中是否可行?
我现在知道我可以通过许多其他手段解决这个问题,但我不想引入新工具(外面说posix或MacOs),我想学习如何使用脚本执行此操作。
那么如何使用shell工具将“ABC”变为“\ 003 \ 000A \ 000B \ 000C000 \”?
为简单起见,我们可以假设序列号为ASCII且不超过255个字符。
答案 0 :(得分:0)
从评论中可以看出,这可能不可能完全符合我的要求。然而,我用小python和sed解决了潜在的实际编程问题。
这是我的shell脚本:
SRC="firmware.hex"
DST="firmware.hex-with-serialno.hex"
SERNO=`python serialno.py`
REPLACE=":107FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1"
sed "s/$REPLACE/$SERNO/g" <$SRC >$DST
这里是serialno.py
file = open("serialno.txt","r")
serno = int(file.readline())
file.close()
serno = serno + 1
file = open("serialno.txt","w")
print >>file, serno
file.close
t="107FC0001003"
for c in '{:07d}'.format(serno):
t += '{:02X}'.format(ord(c))
t += '00'
s = 0
for i in xrange(0, len(t), 2):
b = t[i:i+2]
s += int(b,16)
s = (-s)&0xFF
t = ":" + t + '{:02X}'.format(s)
print t