# TIP 343: A Binary Specifier for [format/scan]
Author: Alexandre Ferrieux <[email protected]>
State: Final
Type: Project
Vote: Done
Created: 03-Dec-2008
Post-History:
Keywords: Tcl,binary
Tcl-Version: 8.6
Tcl-Ticket: 2368084
-----
# Abstract
This TIP proposes to add a %b specifier to the **format** and **scan**
commands for working with integers in base-2 representation.
# Background
The **format** and **scan** commands already have decimal, hexadecimal,
and octal support, but people wanting binary today resort to a hack, namely
going hexadecimal first and then **string map**ping the hex digits to their
four-bits binary representations. We also already have the "0b" notation as
input for **expr**. This lack is inelegant.
# Proposed Change
This TIP proposes to reuse the existing binary representation machinery to
expose a new **%b** specifier:
format %b 5
=> 101
scan 000101 %b x;set x
=> 5
The good properties of the existing code make the addition really painless, in
that it automagically combines with the size \(l,ll\), width \(digits\), and
prefix \(\#\) modifiers:
format %#06b 5
=> 0b0101
format %llb [expr {(2**72-1)/7}]
1001001001001001001001001001001001001001001001001001001001001001001001
# Rationale
That is really low-hanging fruit. All the pieces are in place, it's just a
matter of exposition. The binary representation is a nice pedagogic tool, and
having it handy \(rather than with a hack\) is a bonus.
# Reference Implementation
See Patch 2368084 <https://sourceforge.net/support/tracker.php?aid=2368084> .
# Copyright
This document has been placed in the public domain.