2016-12-07 3 views
1

Ich frage mich, ob jemand mir helfen kann Ich lerne nur c, ich versuche, Inhalt eines unsigned Char-Array in 2 Hälften zu teilen, die das Ergebnis in zwei unsigned gespeichert werden kann int ist,Teilen Inhalt eines unsigned Char-Array in 2 Hälften

Zum Beispiel Zwecke habe ich, unter dem einige Code einen hex-Wert in ein Byte-Array fügt hinzu: Wie würden Sie den Inhalt val [] in zwei, sondern halten die gleiche Reihenfolge

#include <stdio.h> 
typedef unsigned char BYTE; 
int main() 
{ 
    // Sample purposes putting hex into val[8] 
    int i,j; 
    long long hex=0x78661EB54FE76763; 
    BYTE val[8]; 

    for(j=0,i=7; i>=0; i--,j++){ 
     val[j]= (hex>>(i*8))&0xff; 
    }  

    // How to split the contents of val[8] which now holds the hex 

    return 0; 
} 

I gespalten Ich versuche, den Hex-Wert in 78661EB5, 4FE76763 zu teilen und jede innerhalb eines vorzeichenlosen int zu speichern, das in val [8] in meinem Beispiel

gespeichert ist

Antwort

0

Ihre Variable long long hex ist kein "char-Array", aber Sie können so etwas ausprobieren, beachten Sie durchgängig vorzeichenlose Typen.

#include <stdio.h> 
#include <stdint.h> 

int main(void) 
{ 
    uint64_t hex = 0x78661EB54FE76763; 
    uint32_t lo, hi; 

    hi = hex >> 32; 
    lo = hex & 0xFFFFFFFF; 
    printf("%08X %08X\n", hi, lo); 
    return 0; 
} 

Programmausgabe:

78661EB5 4FE76763 
+0

leid, wenn mein questain verwirrend ist, meine ich val [8], um den Hex-Wert von 78661EB54FE76763 enthält, und das ist, was ich zu spalten versuchen. –

+0

'val [8]' enthält nichts, es ist ein Sprungbrett. In Ihrer Frage wurde gefragt, wie dieser Wert in 2 unsigned-Ints aufgeteilt werden soll, und diese Antwort ist ohne ein 8-Byte-char-Array möglich. –

+0

Sorry, dass Code ist verwirrend, ich füllte BYTE val [8] mit dem Wert. Ich versuche BYTE val zu trennen [8]. Ich habe das Beispiel weniger verwirrend gemacht –

0

Erstellen Sie eine Hilfefunktion, die einen Zeiger auf ein Array von unsigned char und rufen zweimal nimmt.

Einige Dinge offen für OP zu entdecken.

unsigned long form_big_endian4(const unsigned char * x) { 
    unsigned long y = TBB;   // What should the initial value be? 
    for (int i = 0; i < TBD; i++) { // How many times to loop? 
    y *= TBD;      // Hint: max value of 8 bits + 1 
    y += x[i];      
    } 
    return y; 
} 

#include <stdio.h> 
int main(void) { 
    const unsigned char val[8] = 
     { 0x78, 0x66, 0x1E, 0xB5, 0x4F, 0xE7, 0x67, 0x63 }; 
    unsigned long half = form_big_endian4(val); // Why long: Hint how small can unsigned be? 
    printf("%08lX\n", half);     // Why 0 in format? Why `lX`? 
    half = form_big_endian4(val + TBD);   // How far an offset? 
    printf("%08lX\n", half); 
    return 0; 
} 
Verwandte Themen