【问题标题】:how to recode back? BitConverter如何重新编码?位转换器
【发布时间】:2010-02-22 17:06:08
【问题描述】:

byte[] test = Form1.StrToByteArray("simpletext"); string encoded_text = BitConverter.ToString(test).Replace("-", "").ToLowerInvariant(); textBox1.Text = encoded_text;//73696d706c6574657874

从这一行“73696d706c6574657874”返回“simpletext”??

//StrToByteArray()

 public static byte[] StrToByteArray(string str)
 {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            return encoding.GetBytes(str);
 }

【问题讨论】:

    标签: c#


    【解决方案1】:

    你绝对必须使用十六进制开始吗?一种稍微更有效(并且可通过框架方法逆转)的选项是使用 base 64:

    string base64 = Convert.ToBase64String(test);
    byte[] originalBytes = Convert.FromBase64String(base64);
    string text = Encoding.ASCII.GetString(originalBytes);
    

    我个人不建议使用 ASCII 作为编码,但是 - UTF-8 对 ASCII 字符的工作方式相同,但允许对所有 Unicode 进行编码。

    如果您确实必须使用十六进制,您将需要一种解析十六进制的方法 - I have an example here

    【讨论】:

    • thx 伙计,但我可以使用 ASCII 码,因为stackoverflow.com/questions/2305676/… 这里我有字符串 dec = "A-ґР^E—‹";//asdasdas - 此文本必须接收“asdasdas” ,但我得到“3?}Fg5??”,因为我使用 ASCII
    • @Alex:实际上,该帖子显示“dec”包含 非 ASCII 字符......你真的很乐意使用非常有损的转换吗?
    • 谢谢,我喜欢你的例子也很有用。我把它们放在一起:)
    【解决方案2】:
    var input = "73696d706c6574657874";
    var bytes = Enumerable
        .Range(0, input.Length)
        .Where(x => 0 == x % 2)
        .Select(x => Convert.ToByte(input.Substring(x, 2), 16))
        .ToArray();
    Console.WriteLine(Encoding.ASCII.GetString(bytes));
    

    【讨论】:

    • 这是一个非常低效的解析器,请注意。查看我的答案中的链接以获得更有效的版本。我也对 OP 使用的其他策略表示严重怀疑。
    【解决方案3】:

    应该这样做

    public static byte[] StrToByteArray(string str)
            {
                System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                return encoding.GetBytes(str);
            }
    

    //这里我将 ASCIIEncoding 替换为 UTF8Encoding 我怎么说 Darin Dimitrov。尊重男人!!!非常感谢!!!!

    现在我的结果等于 A-ґР^E—‹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      相关资源
      最近更新 更多