2 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
小寫和大寫 ACSII 和 UTF8 代碼的字節(jié)表示具有 32(或 hex20)的偏移量,因此您可以實(shí)現(xiàn)x == byte[x] || x == byte[x+32]與 x=uppercase char 值的比較。
編輯:
假設(shè)您真的只需要處理小寫和大寫英文字母,您可以使用按位運(yùn)算來加快速度,因?yàn)槟梢砸淮翁幚?8 個(gè)字節(jié)/字符,因?yàn)樗鼈儍H在第 3 個(gè)最重要的位上有所不同:
'b' & 0b_1101_1111 == 'B' & 0b_1101_1111
所以你可以處理 8 字節(jié)塊中的字節(jié)數(shù)組:
void Main()
{
byte[] a = "ASDADAGF".Select(x => (byte)(x) ).ToArray();
byte[] b = "asdAdAGF".Select(x => (byte)(x) ).ToArray();
bitCompared(a,b).Dump();
}
static bool bitCompared( byte[] b1, byte[]b2)
{
UInt64 a = BitConverter.ToUInt64(b1, 0); //loop over the index
UInt64 b = BitConverter.ToUInt64(b2, 0);
UInt64 mask =0b_1101_1111_1101_1111_1101_1111_1101_1111_1101_1111_1101_1111_1101_1111_1101_1111;
return (a &= mask) == (b &= mask);
}
afaik 還有更多使用 SIMD 和其他低級(jí)“黑客”進(jìn)行優(yōu)化的方法.....

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
將byte數(shù)組轉(zhuǎn)換為 astring然后進(jìn)行不區(qū)分大小寫的比較。就像是:
bool caseInsensitiveByteArrayComparison(byte[] a, byte[] b) {
string aString = System.Text.Encoding.UTF8.GetString(a);
string bString = System.Text.Encoding.UTF8.GetString(b);
return string.Equals(aString, bString, StringComparison.CurrentCultureIgnoreCase);
}
- 2 回答
- 0 關(guān)注
- 211 瀏覽
添加回答
舉報(bào)