1

我在增加代表 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"
4

1 回答 1

1

首先,我认为您应该利用根据需要#附加的标志,0x而不是自己添加它。另外,我不确定我是否理解填充(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
于 2013-07-12T14:37:38.063 回答