ZetCode

Tcl binary Command

last modified April 3, 2025

The Tcl binary command provides operations for creating and manipulating binary data. It's essential for working with binary files, network protocols, and data encoding/decoding.

Basic Definition

The binary command converts between different binary representations and performs binary data operations. It has several subcommands for specific operations.

Syntax: binary format template ?value value...? creates binary data. binary scan string template ?varName varName...? parses binary data. Other subcommands include encode and decode.

Binary Format Example

This example shows how to create binary data from different value types.

binary_format.tcl
set binaryData [binary format "i3s" 42 7 15 300]
puts "Binary data length: [string length $binaryData]"

This creates binary data containing a 32-bit integer (42), three 16-bit shorts (7, 15, 300). The format string "i3s" specifies the data types. The result is stored in binaryData.

Binary Scan Example

This demonstrates parsing binary data into variables using format specifiers.

binary_scan.tcl
set data "\x2a\x00\x00\x00\x07\x00\x0f\x00\x2c\x01"
binary scan $data "i3s" intVal short1 short2 short3
puts "Parsed values: $intVal, $short1, $short2, $short3"

The binary data is parsed into one integer and three short values. The format string "i3s" matches the data layout. The values are stored in the specified variables.

Base64 Encoding

The binary command can encode and decode data in Base64 format.

binary_base64.tcl
set text "Hello, Tcl!"
set encoded [binary encode base64 $text]
set decoded [binary decode base64 $encoded]
puts "Encoded: $encoded"
puts "Decoded: $decoded"

This example encodes a string to Base64 and then decodes it back. The encode and decode subcommands handle the conversion. Base64 is useful for binary data in text contexts.

Hex Encoding

Hexadecimal encoding represents binary data as ASCII hexadecimal digits.

binary_hex.tcl
set binary "\x48\x65\x6c\x6c\x6f"
set hex [binary encode hex $binary]
set back [binary decode hex $hex]
puts "Hex: $hex"
puts "Original: $back"

The binary data "Hello" is converted to its hexadecimal representation. The encode hex and decode hex subcommands perform the conversion. Hex is useful for debugging binary data.

Binary String Operations

The binary command can manipulate binary strings directly.

binary_string.tcl
set str1 "Hello"
set str2 "World"
set combined [binary format "a5a5" $str1 $str2]
binary scan $combined "a5a5" part1 part2
puts "Combined: $part1$part2"

This combines two strings into a binary format and then splits them back. The "a" format specifier handles fixed-length strings. This technique is useful for binary protocols.

Floating Point Numbers

The binary command can handle floating-point numbers in binary.

binary_float.tcl
set pi 3.14159
set binaryPi [binary format "d" $pi]
binary scan $binaryPi "d" recoveredPi
puts "Original: $pi, Recovered: $recoveredPi"

This stores a double-precision floating-point number in binary and reads it back. The "d" format specifier handles 64-bit floating-point numbers. Precision is maintained during conversion.

Best Practices

This tutorial covered the Tcl binary command with practical examples showing its usage for binary data manipulation and conversion.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Tcl Tutorials.