簡體   English   中英

C#讀取UTF8 UInt64

[英]C# read UTF8 UInt64

我目前正在編寫Flac-Decoder,因此我必須讀取flac-header中編碼的2個UTF8值。 在文檔中:

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) 

他們在自己的bitreader文件Bitreader (第1327行)中使用自制函數來獲取更大的UTF8(可變塊大小)。

我看了一下,將其翻譯成c#並不是很好的代碼。 因此,我考慮將binaryreader與UTF8編碼一起使用,並使用以下方法進行讀取: ReadUint64 這可能可行嗎? 結果是否相同,最快的解決方案是什么?

不,那是行不通的。 ReadUInt64只會讀取8個字節。 編碼僅用於讀取實際文本(即ReadCharReadChars) ,並且這些char 將不起作用,因為char類型僅為16位,而且這些char都不會期望36位的值。

當他們在您的文檔中編寫“ UTF8編碼”時,並不表示它是真正的UTF-8,而是意味着他們使用與UTF-8編碼字符相同的原理對數字進行編碼(畢竟,也只是數字,但有更復雜的限制)。

如果您查看Wikipedia ,您會發現它們列出了准確的UTF-8字符編碼方式(最多31位)。 對於36位的值,繼續執行此序列非常簡單-在這種情況下,第一個字節為二進制的11111110-這就是您應該對樣本編號執行的操作。

盡管您可能認為代碼不是很好,但這幾乎是最明智的方法-由於UTF-8的工作原理,您無論如何都不會避免對位進行操作-並且當然可以進行一些修改在那個確切的代碼上,基本結構不太可能有很大不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM