2011-09-21 16 views
6

En un ejemplo de código de C++, abriré un archivo e imprimiré cada char en hexa . El archivo tiene solo 16 caracteres pero ¿por qué ffffff imprimirá después de cada valor de la línea?Al imprimir valores hexadecimales usando% x ¿por qué se imprime 'ffffff' después de cada valor?

char buff[256]; 
// buff filled with fread 
for(i=0;i<16;i++) 
printf("%x",buff[i]); 

de salida es:

4affffff67ffffffcdffffff 

¿Por qué es esto?

+3

Muestre el código completo, específicamente, lo que 'buff' es y cómo se llena de datos. – orlp

+2

Por amor al tocino, _PLEASE_ no agregue etiquetas que no se apliquen a su pregunta. Usted indicó que es código C++ (aunque yo diría que es realmente código C) pero agregó otros idiomas ... no haga eso. –

+0

Etiquete el código C válido como tal, y solo como tal. Otras personas que navegan por el sitio podrían pensar que esto es bueno/común/canónico/etc. Código C++ – PlasmaHH

Respuesta

12

Editar:

 
printf("%x", (int)(*(unsigned char*)(&buff[i]))); 

Esto debería hacer el truco. Mi primera versión fue incorrecta, lo siento. El problema está en el bit de signo: cada valor más de 127 se manejó como negativo. Casting para char sin signo debería resolver el problema.

+0

Gracias por su rápida respuesta. Pero después de agregar (int) también su impresión ffffff – Syedsma

+0

Muestra la definición de variable buff. –

+0

char buff [256] = {0) – Syedsma

0
printf("%x", (unsigned int)(unsigned char)buff[i]); 

Explicación:

printf primero convertir char a int para usted. Si su char está firmado (el primer bit es 1) - p. 10000001 - entonces la extensión de signo conservará el valor al convertir a int: 11111111 11111111 11111111 10000001. La solución es convertirlo usted mismo primero (sin extensión de signo).

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/11911005) –

+0

true ... explicación agregada –

Cuestiones relacionadas