Pergunta

Não é possível exatamente encontrar uma maneira de como fazer o seguinte em C / C ++.

Entrada: valores hexadecimal, por exemplo: FFFFFFFFFF ...

Eu tentei o código a seguir, a fim de ler a entrada:

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

Isso funciona bem e tudo, mas como faço para dividir os 2bytes em 1bytes uint8_t valores (ou talvez até mesmo ler apenas o primeiro byte). Gostaria de ler o primeiro byte da entrada, e armazená-lo em uma matriz de bytes em uma posição de escolher.

uint8_t matrix[50][50]

Desde que eu não estou muito hábil na formatação / lendo da entrada em C / C ++ (e só tenho usado scanf até agora) quaisquer outras ideias sobre como fazer isso facilmente (e rápido se vai) é muito apreciada.

Edit:. Encontrado mesmo um melhor método usando a função fread uma vez que permite uma especificar quantos bytes deve ler-se a partir do fluxo (stdin, neste caso) e salvar em uma variável / array

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

Parâmetros

ptr -. Ponteiro para um bloco de memória com um tamanho mínimo de (tamanho * Contagem) bytes

tamanho -. Tamanho em bytes de cada elemento a ser lido

contagem -. Número de elementos, cada uma com um tamanho de bytes de tamanho

stream - Ponteiro para um objeto de arquivo que especifica um fluxo de entrada.

cplusplus ref

Foi útil?

Solução

%x lê um unsigned int, não um uint16_t (pensei que eles podem ser o mesmo em sua plataforma específica).

Para ler apenas um byte, tente o seguinte:

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

Isto lê um unsigned int, mas pára depois de ler dois personagens (dois caracteres hexadecimais é igual a oito bits, ou um byte).

Outras dicas

Você deve ser capaz de dividir a variável assim:

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

Um casal de pensamentos:

1) lê-lo como caracteres e convertê-lo manualmente - doloroso

2) Se você sabe que há um múltiplo de 4 hexits, você pode apenas ler em twobytes e depois converter para valores de um byte com altos = twobytes << 8; baixos = twobyets e FF;

3)% 2x

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top