, 설명의 비트. C 배열 인덱싱은 1이 아닌 0에서 시작하므로 바이트 0은 'a'
이고 바이트 1은 'b'
입니다. 둘째로, 세 번째 바이트는 uint64_t
변수를 포함 할 수 없지만, 인덱스 2는 인 개체의 시작 일 수 있습니다.
아니요, memmove()
에 해당하는 lseek
은 없습니다. 파일 작업과 달리 memmove()
을 호출하면 시작 지점을 지정해야하기 때문입니다.
그리고이 경우 memmove()
대신 memcpy()
을 사용할 수도 있습니다. 둘 사이의 유일한 차이점은 memmove()
이 중복 버퍼를 올바르게 처리한다는 것입니다. 원본과 대상이 별개의 개체이기 때문에 걱정할 필요가 없습니다. 코드의 속도에 큰 영향을주지는 않지만 읽는 사람은 memmove()
을 선택한 이유가 궁금하지 않아도됩니다.
을 감안할 때 : 나는 sizeof target
보다는 sizeof (uint64_t)
을 사용
memcpy(&target, buf+2, sizeof target);
참고 :
unsigned char buf[SOME_SIZE];
uint64_t target;
당신은 이런 식으로 뭔가를 할 수 있습니다. 둘 중 어느 것도 작동하지만 sizeof target
을 사용하면 코드를보다 탄력적으로 만들 수 있습니다 (나중에 변경하면 오류에 덜 취약합니다). target
유형을 변경하려면 memcpy()
호출에서 유형을 변경하는 것을 기억할 필요가 없습니다.
포인터 수학과 캐스팅이 너무 힘들어요? –