2013-07-12 4 views
1

У меня проблема с увеличением строки битов, которая представляет адрес IPv4. Строка выглядит так: "E8 00 00 64" То, что я пытаюсь сделать, заключается в следующем: при добавлении к этой строке значения aSourceAddress, последний бит должен быть увеличен, т. Е. При добавлении 5 строка должна выглядеть так: "E8 00 00 69". Однако, когда я добавляю 6, я получаю "E8 00 00 70", и то, что я надеюсь получить, это "E8 00 00 6A". Логично это просто, мне нужно преобразовать переменную aSourceAddress в hex и добавить ее в 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

Во-первых, я думаю, вы должны воспользоваться # флагом, который присоединяет 0x по мере необходимости, вместо того, чтобы добавить его на свой собственный. Кроме того, я не уверен, что я понимаю, отступы (The 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 
+0

+1 Хотя я бы предпочел пример с '$ aSourceAddress = 6'. И в последнем примечании, можно также использовать 'string toupper' для изменения' 6a' на '6A'. – Jerry

+0

@Jerry - Отличные очки. Отредактированный и повторный код, чтобы убедиться. Благодарю. –

+2

Использование '% 02X' (с заглавной буквой) делает' format' выдает правильный вывод без дополнительной строки 'string toupper'. –

Смежные вопросы