저는 C++을 처음 사용합니다. LSB에서 크기 128 비트의 부호없는 char 배열에 긴 정수 값을 저장하는 데 도움이 필요합니다. exxample의 경우 :부호없는 char 배열의 뒷부분에 long 복사
0x00000000000000000000000000003430
참고 : 다음 myArray
의 MSB에서
long int myLong = 12340;
unsigned char myArray[16] = {};
memcpy(myArray,&myLong,sizeof(long int));
사본을, 즉,
0x34300000000000000000000000000000
하지만 myLong
필요는 myArray
에 저장하는 내가 ' 64 비트 리틀 엔디안 (LSB) 컴퓨터에서 작업하고 있습니다. 그리고 해당 바이트를 오른쪽으로 이동해야합니다. 이 목표를 달성 할 수있는 방법이나이 일을 수행하는 기존 기능이 있습니까?
편집 : 내 나쁜, 나는 myLong = 12340
& myLong = 0x12340
출력 사이의 차이를 기각. myLong = 0x12340
& memcpy
사용하는 경우 나, 그에 따라 질문 & 예를 수정, myArray
보이는 같은 :
0x40230100000000000000000000000000
endianess와는 아무런 관련이 없습니다. 실제로 결과는 (32 비트 long 및 MSB 컴퓨터에서) '0x00 0x01 0x23 0x40 0x00 0x00 etc'이어야합니다. 나는 당신이 그 값의'memcpy'를 가진 숫자들 사이에 제로 패딩을 얻는 방법을 모른다. 오, 당신이 LSB 머신 (x86 또는 x86_64와 같은)에서이 작업을했다면, 결과 배열은'0x40 0x23 0x01 0x00'과 그 뒤에 모두 0이 될 것입니다. –
나는 혼란 스럽다. PowerPC CPU를 사용 중이라고 가정 할 때 출력이 '040'대신 '400'으로 끝나는 이유는 무엇입니까? 마지막에 여분의 0을 원하십니까? –
'array + 12'에 저장하고 싶으면'memcpy (myArray + 12, ....)'라고 말하십시오. 그리고 @ JoachimPileborg는'0x12340! = 0x01020304'라고 언급 했으므로 기대치가 약간 분명하지 않습니다. 리틀 엔디안 컴퓨터 (예 : x86 또는 x86_64)에서는 예제가 '0x40230100000 ...'을 생성 할 것으로 예상됩니다. – twalberg