【问题标题】:Converting Byte Array to delimited String of raw byte values将字节数组转换为原始字节值的分隔字符串
【发布时间】:2009-10-29 11:58:40
【问题描述】:

我正在创建一个应用程序,该应用程序将监视特定注册表项值的更改并将这些更改写入文本文件。

目前我可以监控更改并知道特定值何时发生更改并收集这些值中保存的数据。我目前遇到的问题是数据的返回类型是字节,我希望最初将其转换为字符串以进行显示,所以我知道它返回正确的值,然后可以保存到文本文件中。

我问的原因是稍后用户下次登录系统时,将创建或更改这些键以匹配以前的值。 (这样做是为了像当前使用强制配置文件一样保存用户偏好)。

如果有人有任何建议,将不胜感激。

【问题讨论】:

  • 对,我现在更改了以下内容: byte[] bytes = (byte[])key.GetValue(e.RegistryValueChangeData.ValueName);字符串 str = Encoding.ASCII.GetString(bytes);我在这里遇到的问题是字符串是乱码,应该什么也不显示。

标签: c# .net string registry


【解决方案1】:

这取决于字节是什么。

你需要弄清楚这些字节是从什么 encoding 生成的,然后编写如下内容:

string str = Encoding.UTF8.GetString(bytes);

根据字节的制作方式,您可能需要使用Encoding.ASCIIEncoding.GetEncoding

【讨论】:

  • 正是 OP 正在寻找的。 :D +1
【解决方案2】:

在转换为字符串之前,您首先需要确定字节的编码方式..

然后:

System.Text.Encoding enc = System.Text.Encoding.ASCII;
string myString = enc.GetString(myByteArray );

【讨论】:

    【解决方案3】:

    System.Text.Encoding 类具有将字节转换为字符串的静态方法。在您的情况下,您需要使用 System.Text.Encoding.ASCII.GetString(bytes)。酌情使用其他编码(UTF8、UTF16)。

    【讨论】:

      【解决方案4】:

      不要使用特定的编码,而是使用系统的默认编码:

          public string ReadBytes(byte[] rawData)
          {
              //the encoding will prolly be the default of your system
              return Encoding.Default.GetString(rawData);
          }
      

      【讨论】:

      【解决方案5】:

      是的,我现在已经能够通过将注册表值存储在一个字节数组中来解决这个问题,然后使用以下代码将数组的每个部分添加到一个字符串中:

      RegistryKey key = Registry.Users.OpenSubKey(e.RegistryValueChangeData.KeyPath);
      
                  Byte[] byteValue = (Byte[])key.GetValue(e.RegistryValueChangeData.ValueName);
      
                  string stringValue = "";
      
                  for (int i = 0; i < byteValue.Length; i++)
                  {
                      stringValue += string.Format("{0:X2} ", byteValue[i]);
                  }
      

      感谢大家的建议

      【讨论】:

        猜你喜欢
        • 2013-03-20
        • 1970-01-01
        • 2011-12-18
        • 2020-07-09
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多