我遇到了增加代表IPv4地址的字符串的问题。
字符串看起来像"E8 00 00 64"
我要做的是:在为此字符串添加值aSourceAddress
时,应增加最后一位,即添加5时,字符串应如下"E8 00 00 69"
。但是,当我添加6时,我得到"E8 00 00 70"
,我希望得到的是"E8 00 00 6A"
。
逻辑上很简单,我需要将aSourceAddress
变量转换为十六进制并将其添加到64,但我的输出再次为70。
所以我想我要问的是,我怎样才能得到十六进制的结果。
这就是我到目前为止所拥有的一切。
proc dec2hex {dec_num} {return [format %04X $dec_num]}
set lEndOfAddress {format 0x%x[expr { 0x64 + 0x[dec2hex $aSourceAddress] }]}
set lCompareIpAddr "E8 00 00"
append lCompareIpAddr " $lEndOfAddress"
答案 0 :(得分:1)
首先,我认为你应该利用#
标志,根据需要附加0x
,而不是自己添加。{1}}。另外,我不确定我是否理解填充(4
),但我会留下:
proc dec2hex {dec_num} {return [format %0#4X $dec_num]}
我认为您的括号和/或间距在您的编辑中很糟糕,但这是下一行,已修复:
set lEndOfAddress [format %02X [expr { 0x64 + [dec2hex $aSourceAddress] }]]
简化你的最后一行,
set lCompareIpAddr "E8 00 00 $lEndOfAddress"
我得到了结果,
% set aSourceAddress 6
5
% proc dec2hex {dec_num} {return [format %0#4X $dec_num]}
% set lEndOfAddress [format %02X [expr { 0x64 + [dec2hex $aSourceAddress] }]]
6A
% set lCompareIpAddr "E8 00 00 $lEndOfAddress"
E8 00 00 6A