마이크를 읽고 PCM 데이터를 버퍼에 저장하는 응용 프로그램을 개발 중이며 버퍼를 16 진수 값으로 변환하고 조작하려고합니다. 기본적으로 C 프로그램에서 xxd 기능을 구현하려고합니다. 파일 (file.pcm)에 PCM 데이터를 쓴 다음 "xxd -r file.c >> file.h"를 사용하여 수동으로 처리 할 수 있습니다. 그러면 구조와 길이에 16 진수 데이터가 제공됩니다.PCM 데이터를 16 진수 데이터로 변환하는 방법
답변
글쎄, 나는 16 진수에서 16 진수의 "변환"을 원한다고 가정 할 것이다.
이- 파일에 넣어 문자열은 다음과 같습니다
#include <stdio.h> int main(int argc, char* argv[]) { FILE* fd = NULL; // File descriptor. unsigned char c = '\0'; // Character. int status = 0; // fread() status. if(argv[1] == NULL) { fprintf(stderr, "Usage: %s <file name>\n", argv[0]); return 1; } fd = fopen(argv[1], "w"); if(fd == NULL) { fprintf(stderr, "Error: cannot write to file %s.\n", argv[1]); return 1; } for(status = fread(&c, 1, 1, stdin); c != EOF && status != 0; status = fread(&c, 1, 1, stdin) ) { char buff[2]; sprintf(buff, "%02X", (unsigned char)c); c = 0; fwrite(buff, 1, 2, fd); } fclose(fd); return 0; }
상점 몇 가지주의 사항 : 여기
코드가 표준 입력에서 어떤 입력을하고 파일에 진수 데이터로 쓰기입니다 마디 없는. 개행 문자가 없으므로 (입력 된 개행 문자는0x0A
,0x0D
또는 둘 다로 변환됩니다.) 서식을 추가하려면 카운터를 추가하고 카운터 값에 따라 공백과 개행 문자 (또는 기타)를 파일에 씁니다 (예 : 줄 다음에if(!((i+1) % 16)) { buff[0] = '\n'; fwrite(buff, 1, 1, fd); }
). - 생성 된 파일에 xxd를 사용하려면 입력에서 16 개의 문자를 읽은 후 새 행을 추가하십시오. 또한 각 줄의 시작 부분에 오프셋을 추가해야합니다.
- 마지막으로 데이터에서 16 진수 문자열로의 변환은
sprintf
행에서 이루어집니다. 그것은 문자열로 인쇄 '(sprintf와)buff
char c
해석 으로 "두 자리 숫자 제로 왼쪽 패딩 대문자 진수"
이것은 좋은 예입니다. 일부 운영 체제에는 원시 데이터를 16 진수로 변환하는 도구 (예 :'hd' 또는'hexdump ')가 이미 있습니다. 일부 운영 체제에는 16 진수 편집기도 있습니다. 또한 한 번에 한 문자 씩 읽고 쓰는 것이 전체 청크를 변환하는 것보다 효율적이지 않을 수 있습니다. 또한,'sprintf' 호출에서'(char) c' 캐스트는 불필요합니다. 어쨌든'int'로 승격됩니다. 또한,'% x' (와'% X')는 **'unsigned int' **를 기대합니다. – dreamlax
네 말이 맞지만이 코드를 읽고 이해하기 쉽도록 작성했다. 그래서 독자에게 변수의 유형을 생각 나게하는 불필요한 캐스트를 추가했습니다 (그리고 독자는 printf가 내부적으로 어떤 일을하는지 신경 쓰지 않아도됩니다.)). 문자열이 아닌 char을 사용하는 것과 동일합니다. 읽기 쉽고 (개선하기 쉽고) 포인터 처리와 같은 불필요한 어려움을 피할 수 있습니다. % x | % X는'unsigned int'를 사용하기 때문에'char' 대신'unsigned char'을 사용하도록 코드를 수정했습니다. –
- 1. 16 진수 데이터를 16 진수 데이터로 변환
- 2. 장치에 16 진수 데이터 보내기 (NSString을 16 진수 데이터로 변환)
- 3. 16 진수 문자열을 데이터로 변환
- 4. 16 진수 값을 iphone에서 BLOB로 변환하는 방법
- 5. 문자열을 16 진수 문자로 변환하는 방법
- 6. 문자열을 16 진수 값으로 변환하는 방법
- 7. 16 진수 값을 색상 이름으로 변환하는 방법
- 8. 자바에서 ASCII를 16 진수 값으로 변환하는 방법
- 9. 16 진수 문자열을 [] []로 변환하는 방법
- 10. 안드로이드에서 16 진수 문자열로 이미지를 변환하는 방법?
- 11. 숫자의 16 진수 표현을 10 진수 값으로 변환하는 방법
- 12. C에서 10 진수 값을 16 진수 문자열로 수동 변환하는 방법?
- 13. 16 진수 데이터를 보내려면 어떻게해야합니까?
- 14. 장치에서 16 진수 형식 데이터를 읽는 방법?
- 15. 16 진수 represetantion에서 이진 데이터를 가진 char *에서 streamstring을로드하는 방법?
- 16. UTF-32 (16 진수)를 UTF-8 (16 진수)로 변환하는 방법
- 17. 16 진수 IP를 Java에서 변환하는 방법은 무엇입니까?
- 18. 16 진수 문자열에서 바이트로 변환하는 BuiltIn 함수
- 19. C에서 부호없는 문자 배열을 16 진수 문자열로 변환하는 방법
- 20. 16 진수 64 부호로
- 21. 16 진수 배열에 사용자 입력 16 진수
- 22. 16 진수 문자열에서 16 진수 문자열 java
- 23. yuv420sp 데이터를 jpeg 데이터로 변환하는 방법
- 24. 16 진수
- 25. MFT에서 PCM 데이터를 출력하는 방법
- 26. for 루프를 사용하여 16 진수 변환기로 변환하는 방법 - 파이썬
- 27. 16 진수 문자열을 단 정밀도 부동 소수점으로 변환하는 방법
- 28. cx_oracle을 사용하여 16 진수 문자열을 파이썬에서 바이너리로 변환하는 방법
- 29. 16 진수 코드를 Java에서 바이트 []로 사용하려면 자동 변환하는 방법?
- 30. 임의의 문자열을 16 진수 색상 코드로 변환하는 방법
당신이 뭘 하려는지 이해가 안 돼요. 16 진수 데이터를 16 진수 문자열로 변환하려고합니까? "Hello world"(16 진수 표현은''68656C6C6F20776F726C64 '로'[0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64]'와 유사)? –
기본적으로 마이크에서 스트림을 기록하고 원시 데이터로 파일에 저장합니다. 원시 데이터를 HexaDecimal 데이터로 변환합니다. – wjdoss
@wjdoss : 16 진수는 단순히 원시 데이터를 나타내는 방법입니다. – dreamlax