我需要在与大型机通信的C#应用程序中将字符串转换为具有偶数奇偶校验的7位ASCII码。我尝试使用Encoding.ASCII,但是,它没有正确的奇偶校验。
发布于 2012-03-30 19:55:19
可能是这样的:
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。我根本看不出有什么关联。
发布于 2012-03-30 19:46:16
你必须自己计算奇偶校验位。所以:
据我所知,这里没有计算奇偶校验位的内置功能。
发布于 2012-03-30 21:37:55
假设字节级奇偶校验和无字节序相关行为(即字节流),则以下代码按预期方式工作(针对已知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;
}https://stackoverflow.com/questions/9941840
复制相似问题