Pregunta

No se puede encontrar exactamente una manera de cómo hacer lo siguiente en C / C ++.

Entrada: Hexdecimal valores, por ejemplo: ffffffffff ...

He intentado el siguiente código para leer la entrada:

uint16_t twoBytes;
scanf("%x",&twoBytes);

Eso funciona bien y todo, pero ¿cómo puedo dividir los 2 bytes en 1bytes uint8_t valores (o tal vez incluso leer sólo el primer byte). Le gustaría leer el primer byte de la entrada, y almacenarlo en una matriz de bytes en una posición de elección.

uint8_t matrix[50][50]

Como no soy muy experto en el formateo / leyendo de la entrada en C / C ++ (y sólo han utilizado scanf hasta ahora) alguna otra idea sobre cómo hacer esto fácilmente (y rápido si se va) es muy apreciada.

Editar:. Se han encontrado incluso un método mejor mediante el uso de la función fread ya que le permite especificar una cantidad de bytes que se debe leer de la corriente (entrada estándar en este caso) y guardar en una variable / array

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

Parámetros

ptr -. Puntero a un bloque de memoria con un tamaño mínimo de bytes (tamaño * recuento)

Tamaño -. Tamaño en bytes de cada elemento para ser leído

contar -. Número de elementos, cada uno con un tamaño de bytes de tamaño

corriente - Puntero a un objeto de archivo que especifica un flujo de entrada.

cplusplus ref

¿Fue útil?

Solución

%x Lee un unsigned int, no un uint16_t (pensaban que pueden ser los mismos en su plataforma en particular).

Para leer un solo byte, intente lo siguiente:

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

Esto lee un <=>, pero se detiene después de leer dos caracteres (dos caracteres hexadecimales es igual a ocho bits, o un byte).

Otros consejos

Usted debe ser capaz de dividir la variable de la siguiente manera:

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;

Un par de reflexiones:

1) leerlo como caracteres y convertir de forma manual - dolorosa

2) Si se sabe que hay un múltiplo de 4 hexits, sólo puede leer en twobytes y luego convertir a los valores de un byte con altas = twobytes << 8; bajas = twobyets & FF;

3)% 2x

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top