C# 位元組數限制(限制字串位元組數)
阿新 • • 發佈:2018-11-01
本章講述:位元組數限制
限制輸入字元(中文)的位元組個數,超過後,擷取多餘的位元組
引用例項: int nLength = GetBytesOfString(OsdText.Text); if (nLength > 30) { OsdText.Text = GetSubStringByLength(OsdText.Text, 30); } //獲取輸入資料位元組大小 返回大小 public int GetBytesOfString(string Text) { int nByte = 0; byte[] bytes = Encoding.Unicode.GetBytes(Text); for (int i = 0; i < bytes.GetLength(0); i++) { // 偶數位置,如0、2、4等,為UCS2編碼中兩個位元組的第一個位元組 if (i % 2 == 0) { nByte++; // 在UCS2第一個位元組時n加1 } else { // 當UCS2編碼的第二個位元組大於0時,該UCS2字元為漢字,一個漢字算兩個位元組 if (bytes[i] > 0) { nByte++; } } } return nByte; } //擷取字串指定位元組數的內容,並返回實際擷取的位元組數 private string GetSubStringByLength(string Text, int LimitSize) { byte[] bytes = Encoding.Unicode.GetBytes(Text); int nByte = 0; // 表示當前的位元組數 int i = 0; // 要擷取的位元組數 for (; i < bytes.GetLength(0) && nByte < LimitSize; i++) { if (i % 2 == 0) // 偶數位置,如0、2、4等,為UCS2編碼中兩個位元組的第一個位元組 { nByte++; // 在UCS2第一個位元組時n加1 } else { if (bytes[i] > 0) // 當UCS2編碼的第二個位元組大於0時,該UCS2字元為漢字,一個漢字算兩個位元組 { nByte++; } } } // 如果i為奇數時,處理成偶數 if (i % 2 == 1) { if (bytes[i] > 0) // 該UCS2字元是漢字時,去掉這個截一半的漢字 i = i - 1; else i = i + 1; // 該UCS2字元是字母或數字,則保留該字元 } LimitSize = i; return Encoding.Unicode.GetString(bytes, 0, i); }