Stack Overflow for Teams A private, secure home for your team’s questions and answers. M9 1a8 8 0 1 0 0 16A8 8 0 0 0 9 1zm. Is there a printf converter to print in binary format? I can binary option edge with printf as a hex or octal number.
Is there a format tag to print as binary, or arbitrary base? You can not do this, as far as I know, using printf. You could, obviously, write a helper method to accomplish this, but that doesn’t sound like the direction you’re wanting to go. There isn’t a format predefined for that.
You need to transform it yourself to a string and then print the string. A quick Google search produced this page with some information that may be useful: forums. Not as part of the ANSI Standard C Library — if you’re writing portable code, the safest method is to roll your own. You need all the extra quotes unfortunately.
And has the advantage also to be invocable multiple times in a printf which the ones with static buffers can’t. Posted an expanded version of this macro with 16, 32, 64 bit int support: stackoverflow. Note that this approach is not stack friendly. Which, depending on stack size, may or may not be an issue. I am not sure why this isn’t voted higher. Agreed, definitely the nicest implementation here. Here is a quick hack to demonstrate techniques to do what you want.
This is certainly less “weird” than custom writing an escape overload for printf. It’s simple to understand for a developer new to the code, as well. A few changes: strcat is an inefficient method of adding a single char to the string on each pass of the loop. I agree that strcat is probably easier to understand than post-incrementing a dereferenced pointer for the assignment, but even beginners need to know how to properly use the standard library. Random: The binary buffer char is static, and is cleared to all zeros in the assignment.
This will only clear it the first time it’s run, and after that it wont clear, but instead use the last value. There isn’t a binary conversion specifier in glibc normally. Here is an example of how to implement a custom printf formats in glibc. I wanted different radixs: so glad I browsed across this. You could use a small table to improve speed1. 1 I’m mostly referring to embedded applications where optimizers are not so aggressive and the speed difference is visible.
Excellent answer, very easy to understand in its simplicity, and a clear winner for small embedded systems. Note that this code would work just as well for any base between 2 and 10 if you just replace the 2’s by the desired base. Where x is any integral expression. It requires an extra copying step in those cases, and it’s no less expensive than having the caller provide the buffer even in cases where copying wouldn’t be required. Using static storage is just a bad idiom.
Here we’re going to have to disagree. But I do think performance, even if it’s on the micro-gain scale, is worth mentioning when it comes as a bonus along with a fundamentally superior design. 64 versions, reusing the INT8 macro to avoid repetition. Is there a particular reason for printing the bits starting with Least Significant Bits? Print the least significant bit and shift it out on the right. Doing this until the integer becomes zero prints the binary representation without leading zeros but in reversed order.
Using recursion, the order can be corrected quite easily. To me, this is one of the cleanest solutions to the problem. If you like 0b prefix and a trailing new line character, I suggest wrapping the function. I corrected the function call and added a demo. Clearer if you use ‘1’ and ‘0’ instead of 49 and 48 in your ternary.