首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串转换为具有偶数奇偶校验的7位ASCII?

如何将字符串转换为具有偶数奇偶校验的7位ASCII?
EN

Stack Overflow用户
提问于 2012-03-30 19:12:44
回答 3查看 5.4K关注 0票数 1

我需要在与大型机通信的C#应用程序中将字符串转换为具有偶数奇偶校验的7位ASCII码。我尝试使用Encoding.ASCII,但是,它没有正确的奇偶校验。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 19:55:19

可能是这样的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-03-30 19:46:16

你必须自己计算奇偶校验位。所以:

  1. 使用内置的8位ASCII码将字符串转换为字节数组。使用此编码时,最高位应始终为0。
  2. 对每个字节进行位修改,并为每个字节设置奇偶校验位。

据我所知,这里没有计算奇偶校验位的内置功能。

票数 2
EN

Stack Overflow用户

发布于 2012-03-30 21:37:55

假设字节级奇偶校验和无字节序相关行为(即字节流),则以下代码按预期方式工作(针对已知7-bit ASCII even parity table进行测试):

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9941840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档