Heim >Backend-Entwicklung >C#.Net-Tutorial >Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C
Wenn Sie getrennt über Bytereihenfolge und Typkonvertierung sprechen, mag jeder denken, dass dies sehr einfach ist, aber er versteht es nicht wirklich. Wenn wir sie kombinieren und diskutieren, werden wir sie vielleicht gründlich verstehen.
Wenn Sie die Grundlagen der Bytereihenfolge und Typkonvertierung nicht verstehen, können Sie auf den folgenden Blog verweisen:
https://my.oschina.net/u/1783725/blog /647973 Big- und Small-Endianness
https://my.oschina.net/u/1783725/blog/700970 Typkonvertierung
Bevor ich auf das Thema eingehe, möchte ich etwas sagen:
Unterschiedliche Systemziffern entsprechen unterschiedlichen Bytegrößen von Datentypen
Details zur Verbindung zwischen den beiden
Endianness: Betriebsspeicher, das heißt die Regel zum Speichern der Daten, die wir im Speicher sehen.
Big Endian: Big Endian ist gültig, Daten hoher Ordnung werden zuerst in den Speicher mit niedriger Adresse und Daten niedriger Ordnung in den Speicher mit hoher Adresse gelegt. Little Endian: Little Endian ist effektiv, niedrig -Ordnungsdaten werden zuerst in den Speicher mit niedriger Adresse gelegt. Die Daten mit hohem Bit werden dann in den Speicher mit hoher Adresse gelegt
Beim Betrieb von Speicher (z. B. memcpy) müssen Sie die Bytereihenfolge berücksichtigen
Typkonvertierung: Die Operation besteht darin, Daten zu lesen. Dabei handelt es sich um Daten, die aus dem Speicher gelesen und entsprechend der Größe der Typbytes konvertiert werden.
Die Zahlen mit vielen Ziffern werden in solche mit kleinen Ziffern umgewandelt (die Daten mit den hohen Ziffern werden abgeschnitten, so dass die Positionsdaten übrig bleiben), und die Zahlen mit kleinen Ziffern werden in solche mit vielen Ziffern umgewandelt (die Daten mit den hohen Ziffern). -stellige Daten werden mit 0 aufgefüllt).
Ein Beispiel, um sie zu verstehen
1. Die Zuweisung hat nichts mit der Byte-Reihenfolge zu tun. Beim Betrieb des Speichers (memcpy) müssen Sie die Byte-Reihenfolge berücksichtigen
1: Weisen Sie 0xABCDEF1234 vom Typ „unsigned long long“ einer Variablen vom Typ „unsigned long long“ zu, unabhängig von der Bytereihenfolge.
2: Verwenden Sie memcpy der Variablen 0xABCDEF1234 vom Typ „unsigned long long“ zu einer Variablen vom kurzen Typ und finden Sie die 0, bezogen auf die Bytereihenfolge
Der Code lautet wie folgt:
#include <stdio.h>int main(int argc, char *argv[]) { unsigned long long ullVar = 0xABCD1234; unsigned long ulVar1 = 0; unsigned long ulVar2 = 0; /*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/ memcpy(&ulVar1,&ullVar,sizeof(ulVar1)); /*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/ ulVar2 = ullVar; printf("ulVar1=%x ulVar2=%x \n",ulVar1,ulVar2); //输出:ulVar1=0 ulVar2=abcd1234 return 0; }