"Leor Zolman" <leor@bdsoft.com> wrote in message
news:d47j901nbigpqv23rp2h71e3eo24ligt1n@4ax.com...[color=blue]
> On Thu, 06 May 2004 01:18:56 GMT, "Kelvin@!!!" <kelvin604@shaw.ca.ca>
> wrote:
>[color=green]
> >Hi everyone:
> >when we wanna use hex numbers in C, we usually write something like:
> >int hex_num = 0x12F9;
> >
> >but how can I declare a binary number in a similar way by putting some
> >leading words to tell the complier this is a binary number???
> >similarly, in printf, we have %d for an decimal number %x and %o for hex[/color][/color]
and[color=blue][color=green]
> >octal numbers... how about binary numbers??
> >
> >Thank you very much...[/color]
>
> Here's something I picked up from, I believe, this very newsgroup not long
> back:
>
> ------------- macros.h: ---------------------------------
>
> /*
> macros.h:
> Binary constant generator macro
> By Tom Torfs - donated to the public domain
> */
>
> /* All macro's evaluate to compile-time constants */
>
> /* *** helper macros *** */
>
> /* turn a numeric literal into a hex constant
> (avoids problems with leading zeroes)
> 8-bit constants max value 0x11111111, always fits in unsigned long
> */
> #define HEX__(n) 0x##n##LU
>
> /* 8-bit conversion function */
> #define B8__(x) ((x&0x0000000FLU)?1:0) \
> +((x&0x000000F0LU)?2:0) \
> +((x&0x00000F00LU)?4:0) \
> +((x&0x0000F000LU)?8:0) \
> +((x&0x000F0000LU)?16:0) \
> +((x&0x00F00000LU)?32:0) \
> +((x&0x0F000000LU)?64:0) \
> +((x&0xF0000000LU)?128:0)
>
> /* *** user macros *** */
>
> /* for upto 8-bit binary constants */
> #define B8(d) ((unsigned char)B8__(HEX__(d)))
>
> /* for upto 16-bit binary constants, MSB first */
> #define B16(dmsb,dlsb) (((unsigned short)B8(dmsb)<<8) \
> + B8(dlsb))
>
> /* for upto 32-bit binary constants, MSB first */
> #define B32(dmsb,db2,db3,dlsb) (((unsigned long)B8(dmsb)<<24) \
> + ((unsigned long)B8(db2)<<16) \
> + ((unsigned long)B8(db3)<<8) \
> + B8(dlsb))
>
> /* Sample usage:
> B8(01010101) = 85
> B16(10101010,01010101) = 43605
> B32(10000000,11111111,10101010,01010101) = 2164238933
> */
>
> ------------ test.c ---------------------
>
> #include <stdio.h>
> #include "macros.h"
>
> int main()
> {
> int i = B8(1010);
> int j = B8(10000000);
>
> printf("i = %d, j = %d\n", i, j);
> return 0;
> }
>
>
> HTH,
> -leor
>
>
> --
> Leor Zolman --- BD Software ---
www.bdsoft.com
> On-Site Training in C/C++, Java, Perl and Unix
> C++ users: download BD Software's free STL Error Message Decryptor at:
>
www.bdsoft.com/tools/stlfilt.html[/color]
thank you for the code...
but ...[color=blue]
> #define HEX__(n) 0x##n##LU[/color]
what does the # stands for here???
--
{ Kelvin@!!! }