2016-11-20 3 views
0

ich eine hexadezimale in unsigned char *hex_1 haben, die enthält:Vergleichen 2 verschiedene hexadezimalen

hex_1[0] = 0x5b 
hex_1[1] = 0x83 
hex_1[2] = 0xb6 
hex_1[3] = 0xe9 

und ich möchte es mit einem Hex-Wert vergleichen: 1ca0aaf9.

Was soll ich tun? Soll ich ein neues Zeichen-Array erstellen, spalte 1ca0aaf9 in 1cca0a, dann mache memcpy()?

EDIT: Ich möchte eigentlich, dass sie mir entweder sagen, "SIE SIND DIE GLEICHEN!" oder "SIE SIND NICHT DIE GLEICHEN!".

EDIT 2: Ich will es wie hex[0] zu sein mit 1c verglichen werden, etc ...

+0

Welche Reihenfolge möchten Sie? Wird 'f9' von' 0x1ca0aaf9' mit 'hex_1 [0]', 'hex_1 [3]' oder etwas anderem verglichen? C gibt diese Reihenfolge nicht an. Deine Entscheidung. – chux

Antwort

2

Sie wahrscheinlich wollen dies:

uint32_t val = *(uint32_t*)(hex_1); // uint32_t is available by #include <stdint.h> 

if (val == 0x1ca0aaf9) 
{ 

} 

Auf einer Big-Endian-Architektur, sind Sie fertig . Auf Intel- und anderen Little-Endian-Architekturen müssen Sie entscheiden, ob dieses Byte-Array logisch so interpretiert werden soll, wie in der Netzwerk-Byte-Reihenfolge 0x5b83b6e9 (dezimal 1535358697). Oder wenn es in Host-Byte-Reihenfolge (0xe9b6835b) (Dezimal 3921052507) sein soll. Wenn das Byte-Array in der Byte-Reihenfolge des Netzwerks ist, müssen Sie die Bytes tauschen. Das macht die ntohl-Funktion.

uint32_t val = *(uint32_t*)(hex_1); 
val = ntohl(val); // <arpa/inet.h> or <winsock2.h> 

if (val == 0x1ca0aaf9) 
{ 

} 
+0

also brauche ich keine 'for loop'? – ThomasWest

+0

@ThomasWest: Sie benötigen keine For-Schleife. – sjsam

+0

Also frage ich mich, wie man überprüft, ob mein 'hex_1' den gleichen Wert mit' 1ca0aaf9' hat? Ich möchte, dass es nach Ähnlichkeit sucht. Tut mir leid, wenn ich es nicht klar erklärt habe. – ThomasWest

Verwandte Themen