Tcl: Jak połączyć dwie wartości binarne?


0

Chcesz połączyć dwie wartości binarne, aby uzyskać wartość 16 bitów i zapisać do pliku.
Pierwszy binarny ma stałą 6 bitów 000111, drugi binarny zaczyna się od 0 i zwiększa o 1 dla każdej pętli.

#!/usr/bin/tclsh
set output_file "output.dat"
set data_number "10"   
set output_fpt [open ./${output_file} w]

for {set x 0} {$x < $data_number} {incr x} {
   set y [expr $x * (2 ** 22)]
   binary scan [binary format I $y] B32 var
   set data [binary format B6B12 000111 $var]

   fconfigure $output_fpt -translation binary
   puts -nonewline $output_fpt $data
}

close $output_fpt

enter image description here

Oczekiwany wynik: 1C00 1C01 1C02 ...

Odpowiedzi:


0

W przypadku danych binarnych warto użyć bitwise  operatory arytmetyczne:

$ tclsh
% set fixed 0b000111
0b000111
% for {set i 0} {$i < 4} {incr i} {
    set n [expr {($fixed << 2 | $i) << 8}]
    puts [format {%d => %d = %b = %x} $i $n $n $n]
}
0 => 7168 = 1110000000000 = 1c00
1 => 7424 = 1110100000000 = 1d00
2 => 7680 = 1111000000000 = 1e00
3 => 7936 = 1111100000000 = 1f00

Proszę zauważyć, że format% b potrzebuje tclsh8.6.
Fisher

0
#!/usr/bin/tclsh
set output_file "output.txt"
set data_number "10"

set output_fpt [open ./${output_file} w]

for {set x 0} {$x < $data_number} {incr x} {
   set q [expr ($x + (7 * (2 ** 10))) * (2 ** 16)]
   binary scan [binary format I $q] B16 var_q

   set data_q [binary format B16 $var_q]

   fconfigure $output_fpt -translation binary
   puts -nonewline $output_fpt $data_q
}

close $output_fpt

enter image description here

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.