我需要在與主機通信的C#應用程序中將字符串轉換爲具有偶校驗的7位ASCII碼。我嘗試使用,但是,它沒有正確的奇偶校驗。如何將字符串轉換爲具有偶校驗的7位ASCII碼?
1
A
回答
2
也許是這樣的:
public static byte[] StringTo7bitAsciiEvenParity(string text)
{
byte[] bytes = Encoding.ASCII.GetBytes(text);
for(int i = 0; i < bytes.Length; i++)
{
if(((((bytes[i] * 0x0101010101010101UL) & 0x8040201008040201UL) % 0x1FF) & 1) == 0)
{
bytes[i] &= 0x7F;
}
else
{
bytes[i] |= 0x80;
}
}
return bytes;
}
沒有經過充分測試。不要問我計算奇偶校驗的魔法是如何工作的。我只是found it here。但是這個的一些變體應該做你想要的。
我試圖讓','
這個工作變成0x82。但我無法弄清楚應該怎麼做。在ASCII中,','
是二進制00101100和0x82是二進制10000010.我根本沒有看到相關性。
2
你將不得不自己計算校驗位。因此:
- 使用內置的8位ASCII編碼將字符串轉換爲字節數組。使用這種編碼,最高位應該總是0。
- 對每個字節進行位修改併爲每個字節設置奇偶校驗位。
我知道沒有用於計算奇偶位的內置功能。
+0
[有點戲法可以幫忙。](http://graphics.stanford.edu/~seander/bithacks.html#ParityParallel) – user7116 2012-03-30 11:52:11
1
假設字節級校驗和無端相關的行爲(即,字節流),下面的作品如預期(針對已知7-bit ASCII even parity table測試):
public static byte[] GetAsciiBytesEvenParity(this string text)
{
byte[] bytes = Encoding.ASCII.GetBytes(text);
for(int ii = 0; ii < bytes.Length; ii++)
{
// parity test adapted from:
// http://graphics.stanford.edu/~seander/bithacks.html#ParityParallel
if (((0x6996 >> ((bytes[ii]^(bytes[ii] >> 4)) & 0xf)) & 1) != 0)
{
bytes[ii] |= 0x80;
}
}
return bytes;
}
相關問題
- 1. 將Ascii字符串轉換爲位流
- 2. 將字符串轉換爲ASCII碼
- 3. 將字符串轉換爲ASCII碼
- 4. 如何將任何字符串轉換爲按位反轉的ASCII字符串?
- 5. 如何將unicode字符轉換爲delphi 7中的ascii代碼?
- 6. 將字符串轉換爲字符ascii
- 7. 如何將字符串轉換爲java中的8位ascii?
- 8. 將字符串轉換爲ascii和ascii爲字符串
- 9. 如何將Unicode字符串轉換爲java中的ASCII碼
- 10. 奇偶校驗位,爲什麼同時有奇偶校驗位和偶校驗位?
- 11. 如何將utf8字符串轉換爲ascii字符串?
- 12. Java:如何將ASCII字符串轉換爲字符串?
- 13. 將字符串轉換爲ASCII和ASCII字符串
- 14. 如何將ASCII字符轉換爲Python中的字符串
- 15. 將字母不是7位ASCII轉換爲ASCII(如將n轉換爲n並將其轉換爲±)
- 16. 將字符串轉換爲ASCII值
- 17. 將字符串轉換爲ASCII
- 18. C++ ::將ASCII值轉換爲字符串
- 19. 將字符串轉換爲ASCII值python
- 20. 將Unicode字符串轉換爲ASCII
- 21. 將字符串轉換爲ASCII值
- 22. 將ASCII字符轉換爲x11鍵碼
- 23. 將ASCII碼轉換爲字符值
- 24. 如何將電子郵件字符串轉換爲ASCII字符?
- 25. 如何將ASCII碼(0-255)轉換爲關聯字符的字符串?
- 26. 從c中的字符串計算奇偶校驗位
- 27. 將數字字符串轉換爲其ASCII碼
- 28. 將ASCII字符串轉換爲相應小數位的字符串
- 29. 將等效的unicode字符串轉換爲Java中的ASCII碼?
- 30. Bash:將非ASCII字符轉換爲ASCII
我已經使用UTF32 UTF7試過,UTF8 ,編碼和默認但不工作基本上要一個「,」字符轉換爲ox82 – ankush 2012-03-30 11:16:02
這些是_all_ Unicode編碼。你可以嘗試'ASCII'編碼,儘管它是8位。 – Oded 2012-03-30 11:16:59
你想要發生什麼非ASCII字符串? – 2012-03-30 11:17:22