Hola Joel Yo solo mostre los ejemplos tal como aparecen en google. Tal vez si escribiera los 8 bits precedidos del 0b pero de todas formas no sirve, ignoro porque hay articulos que muestran ejemplos para GCC que no sirven en la realidad, a menos que sea para versiones mas viejas.
En realidad no deseo almacenar valores binarios, solo necesito hacer operaciones "bitwise" con bytes para implementar la codificacion BASE64 que utiliza 3 bytes juntos y los parte en 4 segmentos de 6 bits. Por el momento la unica solucion fue convertir las constantes a hexadecimal y dejar comentado a un lado el valor binario para que el algoritmo fuera mas "visible" al seguirlo a ojo, deje algo asi como out[0] = MIME_BASE64_CHARSET [ (uin[0]&0xFC/*11111100*/)>>2 ]; out[1] = MIME_BASE64_CHARSET [ (uin[0]&0x03/*00000011*/)<<4 | (uin[1]&0xF0/*11110000*/)>>4 ]; out[2] = MIME_BASE64_CHARSET [ (uin[1]&0x0F/*00001111*/)<<2 | (uin[2]&0xC0/*11000000*/)>>6 ]; out[3] = MIME_BASE64_CHARSET [ (uin[2]&0x3F/*00111111*/) ]; que no fue la solucion que yo esperaba pero no encontre alternativas. Recuerdo en turbo c++ de borland habia que poner 01010011b y ya lo tomaba como binario pero al parecer no es una notacion estandar, asi que despues al trasladar mi codigo a vc++ seguramente tampoco iba a compilar suponiendo que el gcc si hubiera aceptado la forma que se mencionaba en google, creo que aunque no me gusto usar el hexadecimal fue la opcion mas practica. Sobre el codigo que manejas, tal vez fuera mas comodo usar "bitfields" creo que se llamaban, el "problema" es que pone los bits en fila india uno tras otro sin tomar en cuenta el "byte order" que habia que arreglar a mano para que funcione bien en cualquier arquitectura, pues en intel hace swap de bytes/words y en otras no, que desmadre... En fin gracias por el dato, aqui lo dejo como referencia en la carpeta de linux. Saludos! ----- Original Message ---- From: Joel Rodriguez <j...@versamedium.com> To: glo@glo.org.mx Sent: Sun, November 1, 2009 5:01:28 AM Subject: Re: [GLO] GCC & constantes binarias Miguel: eso sería 0x0a (hexadecimal) mi impresión es que solo puedes almacenar información, minimamente como 1 byte (char),. o séa 8-bits, 2 hexadecimales. lo siguiente sería como almacenar medio byte: > invalid suffix "b1010" on integer constant cualquier entero usa minimo 4 bytes en arquitecturas nuevas. haciendo operaciones suponiendo que quieres almacenar valores binarios en 4 bytes (int) generas mascaras de 64 bits int i; unsigned long long int bit[i]; unsigned long long valbit; for(i=0;i<64;i++) { unsigint=(unsigned long long int) 1; bit[i]=(unsigint<<i); /*mascara para cada uno de los 64 bits*/ valbit=0 | bit[i]; /*operacion OR binaria*/ printf("i=%d %lld \n",i,valbit); /* para ver que si, lo está haciendo*/ } para empaquetar los valores binarios, haces como sigue con las mascaras bit[i]: int s[10][64]; /* arreglo de 640 valores binarios muy eficiente ;) */ FILE *condinit; ... for(cuenta=0;cuenta<10;cuenta++){ for(kk=0;kk<64;kk++) { fscanf(condinit,"%f\n",&tempfloat); if(tempfloat==1.0) s[cuenta2]=s[cuenta] | bit[kk]; /*empaqueta un 1 o deja el cero con OR y mascara*/ } } ... saludos, Joel :) Miguel Cardenas wrote: > Hola > > A proposito del encoder para base64, al probarlo me encontre con algo raro, > resulta que necesito hacer algunas operaciones a nivel bit pero no me > funcionan las constantes binarias... > > Si especifico algo como 01010 me lo toma como numero OCTAL, segun San Google > debo usar la notacion 0b1010 o 0B1010 para el GCC pero pura madre no es > cierto, al compilar me dice: > > invalid suffix "b1010" on integer constant > > Mi pregunta es: como jijos del maizal hago para introducir CONSTANTES > BINARIAS en GCC? siguiendo todos los articulos que me regresan google es > 0b+xxxxxx pero no es cierto, al menos en mi GCC 4.2.3 > > Gracias y saludos > > > >