我想將字符串放入字節數組中,但字符串可能太大而不適合。在它太大的情況下,我想盡可能多地將字符串放入數組中。有沒有一種有效的方法來找出有多少角色適合?如何在轉換爲C#中的字節時截斷字符串?
8
A
回答
5
爲了在字符的中間截斷字符串到UTF8字節數組而不破我使用此:
static string Truncate(string s, int maxLength) {
if (Encoding.UTF8.GetByteCount(s) <= maxLength)
return s;
var cs = s.ToCharArray();
int length = 0;
int i = 0;
while (i < cs.Length){
int charSize = 1;
if (i < (cs.Length - 1) && char.IsSurrogate(cs[i]))
charSize = 2;
int byteSize = Encoding.UTF8.GetByteCount(cs, i, charSize);
if ((byteSize + length) <= maxLength){
i = i + charSize;
length += byteSize;
}
else
break;
}
return s.Substring(0, i);
}
返回的字符串然後可以安全地轉移到長度最大長度的字節數組。
2
你應該使用Encoding類來轉換爲字節數組嗎?所有Encoding對象都有一個重寫方法GetMaxCharCount,它會給你「解碼指定字節數所產生的最大字符數」。你應該能夠使用這個值來修剪你的字符串並對它進行正確的編碼。
1
有效的方法是找出多少(悲觀)字節,你將每個字符需要
Encoding.GetMaxByteCount(1);
然後將您的字符串大小的結果,然後將這麼多字符
public virtual int Encoding.GetBytes (
string s,
int charIndex,
int charCount,
byte[] bytes,
int byteIndex
)
如果你想使用較少的內存使用
Encoding.GetByteCount(string);
但這是一個更慢的方法。
1
在.NET編碼類有一個叫做GetByteCount
方法,該方法可以在一個字符串或燒焦[]。如果你傳入1個字符,它會告訴你需要多少個字節用於你使用的任何編碼。
方法GetMaxByteCount
比較快,但是它做了最壞的情況計算,其可能獲得超過實際需要一個較大的數字。
1
Cookey,你的代碼並沒有做你明顯認爲的事情。在您的案例中預分配字節緩衝區是純粹的浪費,因爲它不會被使用。相反,您的分配會丟棄分配的內存,並重置arr
引用以指向另一個緩衝區,因爲Encoding.GetBytes
會返回一個新數組。
相關問題
- 1. 字節轉換爲字符串C#
- 2. 字符串轉換爲字節轉換
- 3. 按字節截斷字符串
- 4. C++和c#轉換字節字符串
- 5. 當從NSString轉換爲Swift時,文本被截斷字符串
- 6. C#將字節數組與字符串轉換爲字符串
- 7. 如何在Oracle中將字節字符串轉換爲數字?
- 8. 如何在不轉換C#的情況下將字符串轉換爲字節[]
- 9. 將字符串截斷爲Python中的特定字節數
- 10. 如何拯救字節數組轉換爲字符串(C++)
- 11. 如何將字節字符串轉換爲字節[]
- 12. 將字節字符串轉換爲python中的字符串
- 13. 的VBScript:Unicode字符串轉換爲字節
- 14. 將字符串[]轉換爲字節[] 2個字符轉換爲字節?
- 15. 將字節值存儲在字符串中?將字節轉換爲字符串?
- 16. 如何在Go中將[Size]字節轉換爲字符串?
- 17. 如何將字符和字符串轉換爲字節數組?
- 18. 截斷字符串
- 19. 在Perl中截斷字節的字符串
- 20. 如何將時間轉換爲c中的c字符串?
- 21. 將字節數組轉換爲C中的字符串#
- 22. 將字節轉換爲c中的二進制字符串#
- 23. 將十六進制字符串轉換爲C++中的字節
- 24. 如何字節串轉換爲可讀的字符串
- 25. 如何將字符串轉換爲javascript中的字節
- 26. 如何將字符串轉換爲Ruby中的字節?
- 27. 如何將字符串轉換爲java中的字節?
- 28. 如何將字符串轉換爲RHINO Js中的字節
- 29. 如何將字節轉換爲Java中的相同字符串
- 30. 如何將字符串中的字節轉換爲整數? Python
如果他的限制是字節數,則這不起作用。 (只有當限制是字符數時) – roim 2014-02-11 20:13:33