C# 二进制转字符串

发布于 2024-11-14 17:06:49 字数 294 浏览 5 评论 0原文

我正在使用 string messagesaga = _serialPort.ReadLine(); 从串行端口读取数据 当我 Console.WriteLine(messaga); 随机字符出现在屏幕上时,这是合乎逻辑的,因为二进制数据不是 ASCII。 我想我使用的方法将数据作为 ascii 处理。 我想做的是创建一个字符串 var 并将来自端口的二进制原始数据分配给它,因此当我 console.write 这个 var 时,我希望看到一个包含二进制数据(例如 1101101110001011010 )而不是字符的字符串。我该如何处理?

I am reading from serial port using string messaga = _serialPort.ReadLine();
When i Console.WriteLine(messaga); random characters appear on the screen which is logical because the binary data is non ASCII.
I suppose the method I am using handles data as ascii.
What i would like to do is create a string var and asign to it the binary raw data coming from the port so when I console.write this var I want to see a string with binary data like 1101101110001011010 and NOT characters. How can i manage that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈独秀 2024-11-21 17:06:49

窃取自如何转换字符串在 C# 中将 ascii 转换为二进制?

foreach (string letter in str.Select(c => Convert.ToString(c, 2)))
{
  Console.WriteLine(letter);
}

Stolen from How do you convert a string to ascii to binary in C#?

foreach (string letter in str.Select(c => Convert.ToString(c, 2)))
{
  Console.WriteLine(letter);
}
樱娆 2024-11-21 17:06:49

你的意思是这样吗?

class Utility
{
  static readonly string[] BitPatterns ;
  static Utility()
  {
    BitPatterns = new string[256] ;
    for ( int i = 0 ; i < 256 ; ++i )
    {
      char[] chars = new char[8] ;
      for ( byte j = 0 , mask = 0x80 ; mask != 0x00 ; ++j , mask >>= 1 )
      {
        chars[j] = ( 0 == (i&mask) ? '0' : '1' ) ;
      }
      BitPatterns[i] = new string( chars ) ;
    }
    return ;
  }

  const int BITS_PER_BYTE = 8 ;
  public static string ToBinaryRepresentation( byte[] bytes )
  {
    StringBuilder sb = new StringBuilder( bytes.Length * BITS_PER_BYTE ) ;

    foreach ( byte b in bytes )
    {
      sb.Append( BitPatterns[b] ) ;
    }

    string instance = sb.ToString() ;
    return instance ;
  }

}
class Program
{
  static void Main()
  {
    byte[] foo = { 0x00 , 0x01 , 0x02 , 0x03 , } ;
    string s   = Utility.ToBinaryRepresentation( foo ) ;
    return ;
  }
}

刚才对此进行了基准测试。上面的代码比使用 Convert.ToString() 快大约 12 倍,如果将校正添加到带有前导“0”的填充中,则速度大约快 17 倍。

You mean like this?

class Utility
{
  static readonly string[] BitPatterns ;
  static Utility()
  {
    BitPatterns = new string[256] ;
    for ( int i = 0 ; i < 256 ; ++i )
    {
      char[] chars = new char[8] ;
      for ( byte j = 0 , mask = 0x80 ; mask != 0x00 ; ++j , mask >>= 1 )
      {
        chars[j] = ( 0 == (i&mask) ? '0' : '1' ) ;
      }
      BitPatterns[i] = new string( chars ) ;
    }
    return ;
  }

  const int BITS_PER_BYTE = 8 ;
  public static string ToBinaryRepresentation( byte[] bytes )
  {
    StringBuilder sb = new StringBuilder( bytes.Length * BITS_PER_BYTE ) ;

    foreach ( byte b in bytes )
    {
      sb.Append( BitPatterns[b] ) ;
    }

    string instance = sb.ToString() ;
    return instance ;
  }

}
class Program
{
  static void Main()
  {
    byte[] foo = { 0x00 , 0x01 , 0x02 , 0x03 , } ;
    string s   = Utility.ToBinaryRepresentation( foo ) ;
    return ;
  }
}

Benchmarked this just now. The above code is approximately 12x faster than using Convert.ToString() and approximately 17x faster if the correction is added to pad with leading '0's.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文