Heim >Backend-Entwicklung >C#.Net-Tutorial >Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C

Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C

高洛峰
高洛峰Original
2016-11-17 13:12:362263Durchsuche

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

Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C

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

Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C

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).

Vertiefte Kenntnisse von Endianness und Typkonvertierung in C/C

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;
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn