Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    3

    [C] Copiare parte di un array uint8_t in un uint32_t

    Ciao a tutti,
    avrei un problema.

    Ho un array di uint8_t lungo 64 e vorrei copiare il contenuto delle celle 2,3,4,5 in un uint32_t.

    e.g:

    uint8_t a[64];
    uint32_t b;

    a è composto da {23,45,67,78,89,90,33,44,55,66,77,88.....}

    e vorrei che b diventasse uguale a 67788990.

    Tutto questo senza usare funz di libreria o union.

    Come faccio? Mi rendo conto che potrebbe essere facile ma non mi viene in mente niente.

    Grazie a tutti.

  2. #2
    Ma vuoi mettere nell'uint_32 una concatenazione delle rappresentazioni decimali dei numeri, o di quelle binarie (ossia il risultato che otterresti tramite una union)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Non so che carattere abbia il tuo problema, ma puoi notare come tu possa scrivere quel numero come:

    67000000 + 780000 + 8900 + 90

    cioè il numero di due cifre più tanti zeri quanti sono i numeri che seguono:

    codice:
    #include <stdio.h>
    #include <stdint.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main()
    {
    
    	uint8_t a[12] = {23, 45, 67, 78, 89, 90, 33, 44, 55, 66, 77, 88};
    	uint32_t b = 0;
    
    	int indexes[4] = { 2, 3, 4, 5 };
    	int size = 4;
    	
    	int i;
    	int j = 0;
    	uint32_t x;
    
    	for(i = 0; i < size; i++)
    	{
    		x = (uint32_t)pow(10.0, (double)j);
    		b += x * a[indexes[size-i-1]];
    		j+=2;
    	} 
    
    	printf("%d\n", b);
    
    	return 0;
    }
    Se noti, all'interno del ciclo colloco i vari numeri nella posizione esatta grazie alla moltiplicazione con le potenze del 10.
    Questo però può essere fatto se tutti i numeri sono di due cifre. Se i numeri hanno cifre variabili, devi calcolare quante cifre hanno e adeguarti di conseguenza.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.