집 >백엔드 개발 >C#.Net 튜토리얼 >C/C++의 엔디안과 유형 변환에 대한 심층적인 이해
바이트 순서와 유형 변환을 따로 이야기하면 누구나 아주 간단하다고 생각할 수 있지만 깊이 이해하지는 못합니다. 그것들을 결합해서 토론한다면 아마도 그것들을 완전히 이해할 수 있을 것입니다.
바이트 순서 및 유형 변환의 기본을 이해하지 못하는 경우 다음 블로그를 참고하세요:
https://my.oschina.net/u/1783725/blog /647973 크고 작은 엔디안
https://my.oschina.net/u/1783725/blog/700970 유형 변환
주제에 들어가기 전에 한 말씀 드리겠습니다:
서로 다른 시스템 숫자는 서로 다른 데이터 유형의 바이트 크기에 해당합니다.
둘 사이의 연결 세부 사항
엔디안: 작동 메모리, 즉 우리가 보는 데이터를 메모리에 저장하는 규칙.
빅 엔디안: 빅 엔디안이 유효하며, 상위 데이터가 낮은 주소 메모리에 먼저 저장되고, 하위 데이터가 상위 주소 메모리에 저장됩니다. 리틀 엔디안: 리틀 엔디안이 유효합니다. -order 데이터가 낮은 주소 메모리에 먼저 들어가고, 높은 비트 데이터가 높은 주소 메모리에 들어갑니다
메모리(예: memcpy)를 작동할 때 바이트 순서를 고려해야 합니다. 🎜>
1: unsigned long long 타입의 0xABCDEF1234를 unsigned long 타입의 변수에 바이트 순서에 관계없이 할당 2: unsigned long long 타입의 0xABCDEF1234 변수의 memcpy를 short 타입의 변수에 사용 바이트 순서와 관련된 0을 찾습니다. 코드는 다음과 같습니다.
#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; }