2012-08-10 2 views
1

현재 Flac-Decoder를 작성 중이므로 flac-header에 인코딩 된 2 개의 UTF8 값을 읽어야합니다. 이 문서에 있습니다 C# read UTF8 UInt64

if(variable blocksize) 
    <8-56>:"UTF-8" coded sample number (decoded number is 36 bits) 
else 
    <8-48>:"UTF-8" coded frame number (decoded number is 31 bits) 

그들은 더 큰 UTF8 (가변 블록 크기)에 대한 자신의 bitreader 파일 Bitreader (라인 1327)에 selfmade 기능을 사용합니다.

나는 그것에 대해 살펴 봤는데 그것은 C#으로 번역하는 아주 좋은 코드가 아닙니다. 그래서 UTF8 인코딩과 함께 binaryreader를 사용하고이 방법으로 읽으 려했습니다. ReadUint64. 가능합니까? 동일한 결과와 가장 빠른 솔루션은 무엇입니까?

답변

0

아니요, 작동하지 않습니다. ReadUInt64는 단지 8 바이트를 읽습니다. 인코딩은 실제 텍스트 (예 : ReadCharReadChars)를 읽기 위해서만 사용되며 char 유형은 16 비트 뿐이므로 36 비트 값을 기대하지 않으므로 이 작동하지 않습니다.

문서에 "UTF8 코드"라고 쓰면 UTF-8이 아닙니다. UTF-8에서 문자를 인코딩하는 데 사용되는 것과 동일한 원칙을 사용하여 숫자를 인코딩한다는 의미입니다. 결국, 숫자 뿐이지 만 더 복잡한 제한이 있음).

Wikipedia을 보면 31 비트까지 UTF-8 문자가 정확히 인코딩 된 것을 알 수 있습니다. 36 비트 값에 대해이 시퀀스를 계속 진행하는 것은 매우 간단합니다.이 경우 첫 번째 바이트는 바이너리에서 11111110이 될 것이고 샘플 번호에 대해이 작업을 수행해야합니다.

코드가 멋지다고 생각하지는 않겠지 만, 그 코드를 사용하는 것이 가장 현명한 방법입니다. UTF-8의 작동 방식 때문에 비트 조작을 피할 수는 없지만 확실히 가능합니다. 그 정확한 코드에 약간의 변형을하기 위해, 기본 구조는 매우 다를 것 같지 않습니다.