【问题标题】:Converting between string bit and string char out to ASCII在字符串位和字符串字符之间转换为 ASCII
【发布时间】:2018-12-23 02:37:59
【问题描述】:

问题是将非ASCII字符转换为二进制,反之亦然

string of bits to string of char
string result = "";
            while (value.Length > 0)
            {   var first8 = value.Substring(0, 8);
                value = value.Substring(8);
                var number = Convert.ToInt64(first8, 2);
                result += (char)number;

和 字符串到位串

string S = "";
            byte[] asciiBytes = Encoding.ASCII.GetBytes(value);
            for (int i = 0; i < asciiBytes.Length; i++)
                for (int j = 0; j < 8; j++)
                {
                    S += (asciiBytes[i] & 0x80) > 0 ? "1" : "0";
                    asciiBytes[i] <<= 1;
                }
            return S;

如果它是最好的,你能纠正我的代码吗?

【问题讨论】:

  • 例如:位串="0011111110110101001111110110111100111111110110110011111101101111" 字符串="?µ?o?Û?o"
  • 您是否收到任何错误或收到意外输出
  • 什么是第一位的?位串还是字符数组?或者你是必须从某种来源生产两者的人?这是一个不容错过的重要细节,因为整个过程都依赖于此。
  • @preciousbetine > 我的代码的输出是意外的......如果第一个代码的结果进入第二个代码的输入,那么输出与第一个代码中的输入不相等......跨度>
  • @Jimi > 我的工作是密码学......这对我来说在我的工作中处理二进制文件是必不可少的。它必须首先在文本框中输入字符,它必须更改为二进制而不是执行一些函数来分散位然后返回字符。但是,如果我使用反函数,这个结束字符必须回到相等的输入字符。问候

标签: c#


【解决方案1】:

您可以将字符串拆分为 8 个字符串,使用 Convert.ToByte 将其转换为字节,然后使用 Encoding.ASCII.GetString 将字节数组转换为字符串。

var str = "0011111110110101001111110110111100111111110110110011111101101111";
var byteArray = Enumerable.Range(0, str.Length / 8)
        .Select(x => Convert.ToByte(str.Substring(x * 8, 8), 2)).ToArray();
var convertedString = Encoding.ASCII.GetString(byteArray);

对于 8 位

Encoding enc = Encoding.GetEncoding(1252);
var convertedString = enc.GetString(byteArray);

输出

?µ?o?Û?o

【讨论】:

  • 谢谢。我尝试了这段代码,但它没有用,因为 ASCII 以(仅 7E -7bits-)结尾,并且没有使用以(FF -8bits-)结尾的 ASCII 扩展字符
  • @seddiq 很高兴为您提供帮助,如果它帮助您解决了您的问题,请将其标记为答案/有帮助。
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多