RosettaCodeData/Task/Variable-length-quantity/Tcl/variable-length-quantity-2.tcl

24 lines
659 B
Tcl

proc numtohex {num} {
binary scan [string trimleft [binary format W $num] \0] H* hexEncoded
regsub -all "..(?=.)" $hexEncoded "&:"
}
proc strtohex {string} {
binary scan $string H* hexEncoded
regsub -all "..(?=.)" $hexEncoded "&:"
}
foreach testcase {
123
254 255 256 257
65534 65535 65536 65537
2097152 2097151
12345678901234566789
} {
set encoded [vlqEncode $testcase]
binary scan $encoded H* hexEncoded
regsub -all {..(?=.)} $hexEncoded &: hexEncoded
set decoded [vlqDecode $encoded]
puts "$testcase ([numtohex $testcase]) ==>\
[strtohex $encoded] ([string length $encoded] bytes) ==>\
$decoded"
}