파일에서 64 비트 부호없는 정수를 읽으려면 어떻게해야합니까? 문자열 표현이 아닌 실제 이진 데이터로 저장되어 있습니다.fscanf()를 사용하여 unsigned long long을 읽으십시오.
1
A
답변
3
어떻게 인코딩 되나요? 이진수는 일반적으로 endianness입니다. 현재 호스트의 엔디안과 같다고 가정하려면 fread
을 직접 사용할 수 있습니다. 그렇지 않으면, 읽은 후에 바이트 스왑해야합니다.
보너스 포인트의 경우 직렬화 방식을 제어한다고 가정하면 일부 플래그 또는 바이트 순서 표시로 엔디안을 나타낼 수 있습니다. 이 같은
3
뭔가 :이 데이터를 쓴 당신이라면
FILE * fp = fopen("file.bin", "rb");
uint64_t value;
if (fread(&value, sizeof value, fp) != sizeof value) { /* error */ }
// ...
fclose(fp);
는,이 상자 밖으로 작동합니다. 데이터가 다른 곳에서 온 것이라면 직렬화 된 형식과 플랫폼 간의 표현 차이 (예 : 바이트 교환이 필요할 수 있음)를 설명하기 위해 이진 형식의 문서를 확인하십시오.
교육적으로는 더 유용하지만 덜 효율적인 방법은 데이터를 버퍼로 읽어 들이고 자신의 처리를 적용하는 것입니다. 이것은 (예를 들어, 당신이 3-2-1-4-7-8-6-5처럼 미친 endian을 해결할 수있는) 더 유연하지만 느린 아마 많은 : 잘
unsigned char buf[sizeof uint64_t];
if (fread(buf, sizeof buf, fp) != sizeof buf) { /* error */ }
uint64_t leval = buf[0] + (buf[1] << 8) + /* ... */;
uint64_t beval = buf[7] + (buf[6] << 8) + /* ... */;
uint64_t ceval = (buf[0] << 16) + (buf[1] << 8) + buf[2] + (buf[3] << 24) + /* ... */;
관련 문제
- 1. % d를 사용하여 unsigned long long을 인쇄하십시오.
- 2. PHP의 확장 함수에서 unsigned long long을 반환합니다.
- 3. fscanf를 사용하여 파일에서 정수를 읽으십시오.
- 4. 부호가있는 long long을 부호가있는 long long 결과에서 뺍니다.
- 5. #define for unsigned long
- 6. 코어 데이터를 사용하여 부호없는 long long을 저장하십시오.
- 7. (lldb) 16 진수로 부호있는 long long을 인쇄하십시오.
- 8. 부호없는 long long을 사용하는 부호 확장
- 9. MSVC++ 처리 unsigned long long int
- 10. 문자열에서 NSNumber에 long long을 저장하려고합니다.
- 11. Java의 unsigned long long과 동일합니까?
- 12. Java long을 * unsigned * base-X 문자열로 변환하는 방법은 무엇입니까?
- 13. 부호없는 long long double long
- 14. 부호없는 long long을 동등한 jni 데이터 유형으로 변환 하시겠습니까?
- 15. 해결되지 않은 외부 기호 "unsigned long gVar"
- 16. 왜 discard의 매개 변수는 unsigned long long 유형입니까?
- 17. Visual C++ 6.0 with unsigned long long 및 sprintf
- 18. 이중으로 부호없는 long long 산술
- 19. C에서 fscanf를 사용하여 문자열 검색
- 20. 랜덤 long long 생성기 C++
- 21. C++에서 long long 정수 대신 unsigned long 정수에 대한 포인터 사용
- 22. GPS 시스템에서 현재의 long long을 빠르게 가져 오는 방법
- 23. long을 사용하여 JNI에서 Java로 포인터를 전달합니다.
- 24. 부호없는 long long int
- 25. fscanf를 사용하여 다른 클래스의 변수 설정
- 26. C에서 fscanf를 사용하여 여러 문자열 읽기
- 27. unsigned long의 snprintf에 쉼표를 추가합니다.
- 28. std :: map <unsigned long long, void *>의 사전 할당, 사전 할당 방법?
- 29. 오버로드 된 ambig (long) 및 ambig (unsigned long)를 정수 리터럴로 호출하는 것이 모호한 이유는 무엇입니까?
- 30. Long Long Number를 백분율로 나누십시오.
, 당신은 다음 FREAD 사용하십시오 fscanf가 아닙니다. 문자열에서 읽는 것이기 때문입니다. http://www.cplusplus.com/reference/clibrary/cstdio/fread/ – billjamesdev