2016-06-28 78 views
0

比方說,我有245個字符的固定的字符串,例如如何從一個始終具有相同長度的字符串中獲取最大字節數組長度?

v0iRfw0rBic4HlLIDmIm5MtLlbKvakb3Q2kXxMWssNctLgw445dre2boZG1a1kQ+xTUZWvry61QBmTykFEJii217m+BW7gEz3xlMxwXZnWwk2P6Pk1bcOkK3Nklbx2ckhtj/3jtj6Nc05XvgpiROJ/zPfztD0/gXnmCenre32BeyJ0Es2r4xwO8nWq3a+5MdaQ5NjEgr4bLg50DaxUoffQ1jLn/jIQ==` 

然後我在一個陣列變換字節使用

System.Text.Encoding.UTF8.GetBytes 

和陣列字節的長度爲224
然後我生成另一個字符串,例如

PZ2+Sxx4SjyjzIA1qGlLz4ZFjkzzflb7pQfdoHfMFDlHwQ/uieDFOpWqnA5FFXYTwpOoOVXVWb9Hw6YUm6rF1rhG7eZaXEWmgFS2SeFItY+Qyt3jI9rkcWhPp8Y5sJ/q5MVV/iePuGVOArgBHhDe/g0Wg9DN4bLeYXt+CrR/bNC1zGQb8rZoABF4lSEh41NXcai4IizOHQMSd52rEa2wzpXoS1KswgxWroK/VUyRvH4oJpkMxkqj565gCHsZvO9jx8aLOZcBq66cYXOpDsi2gboeg+oUpAdLRGSjS7qQPfKTW42FBYPmJ3vrb2TW+g== 

但現在的陣列長度是320
所以我的問題是:我怎樣才能確定一個字節數組的最大長度固定爲245個字符的字符串?
這是我使用用於產生隨機串

static class Utilities 
    { 
     static Random randomGenerator = new Random(); 
     internal static string GenerateRandomString(int length) 
     { 
      byte[] randomBytes = new byte[randomGenerator.Next(length)]; 
      randomGenerator.NextBytes(randomBytes); 
      return Convert.ToBase64String(randomBytes); 
     } 
    } 
+2

我很困惑你的問題。第一個字符串長度爲224個字符,第二個長度爲320個字符。你在哪裏得到245號? – smarx

+0

第二個字符串比第一個字符串大。你究竟在問什麼? – Groo

+0

所有這些字符串看起來都像base64編碼數據。如果是這種情況,所有字符都在ASCII範圍內。 –

回答

3

類按照RFC 3629

在UTF-8,從U + 0000..U + 10FFFF字符範圍(UTF-16 可訪問範圍)使用1到4個八位字節的序列進行編碼。

每UTF-8字符的字節的最大數目是4 ,所以你的字節數組的最大長度爲4次245 980 =。 如果您使用的編碼Byte Order Mark (BOM)你需要3個額外的字節

[...]的BOM 將始終顯示爲八位字節序列EF BB BF。

因此總共。

附加信息:

在您的例子,還轉換的字節數組爲Base64,它利用6個每字符位數,因此具有的4 * Math.Ceiling(Characters/3)的長度,或在您的情況 ASCII字符。

1

根據UTF8的設計,它是可擴展的。

https://en.wikipedia.org/wiki/UTF-8

從理論上講,你沒有的最大長度。

但是,當然,現實世界中的詞語是有限的。

在實踐中,字節長度被限制爲字計數X 4.

245 chars => 980 bytes 

如果尋找一個固定長度編碼,使用Encoding.Unicode

而且,Encoding提供了給出最大字節數的方法。

Encoding.UTF8.GetMaxByteCount(charCount: 245) 
Encoding.Unicode.GetMaxByteCount(charCount: 245) 
-1

簡而言之,你不能。通用文本格式8(您使用),每個字符使用1,2,3或4個字節(如湯米說的),所以唯一的辦法是遍歷所有字符(GetMaxByteCount())並計算它。

也許,如果要繼續使用基於64位字符串一樣,你不併不需要UTF8,相反,你可以使用每個字符編碼任何其他1個字節的ASCII與您共byte array size將是Length你串。