将十六进制值添加到一串位

时间:2013-07-12 13:11:56

标签: decimal tcl addition hex

我遇到了增加代表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"

1 个答案:

答案 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