【问题标题】:byte to string "decimal point is a problem"字节到字符串“小数点有问题”
【发布时间】:2011-09-17 18:14:19
【问题描述】:

这段代码是用 C# dot net 编写的

我收到以下格式的数据 49 46 48 50 相当于十进制格式的 1.02 使用这个简单的代码

DATA = Convert.ToByte(serialPort1.ReadByte());

稍后我在缓冲区中添加数据

buffer[byte_count++] = DATA;   // byte[] buffer = new byte[256];

现在有 49 46 48 50 DATA 字节值

buffer[1] contains 49
buffer[2] contains 46
buffer[3] contains 48
buffer[4] contains 50

问题是小数点 我可以通过简单地从 48 中减去字节值来将 49 转换为 1 但是我如何将 46 转换为小数点并将所有字节保存到字符串中

如果有人能解决我的问题,真的很感激 阿什拉夫

【问题讨论】:

    标签: c#


    【解决方案1】:

    假设数据是 ASCII 使用(根据评论更新):

    string MyString = Encoding.ASCII.GetString (buffer, 1, 4);
    

    MSDN 参考见http://msdn.microsoft.com/de-de/library/system.text.encoding.aspx

    【讨论】:

    • 这将尝试解码整个缓冲区,包括开头的一个未使用字节和数据后的 251 个未使用字节。
    【解决方案2】:

    使用Encoding 类:

    string value = Encoding.ASCII.GetString(buffer, 1, 4);
    

    注意:您已经将数据从 1 开始放入数组中,但数组索引是从零开始的,因此您需要在 GetString 调用中指定偏移量和长度。

    【讨论】:

      【解决方案3】:
          using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      
      namespace ConsoleApplication1
      {
          class Program
          {
              static void Main(string[] args)
              {
                  byte[] bytes = { 49, 46, 48, 50 };
                  //get string
                  string str = new string(Encoding.ASCII.GetChars(bytes));
                  Console.WriteLine(str);
      
                  //get number
                  double d;
                  if (double.TryParse(str, out d))
                  {
                      Console.WriteLine(d);
                  }
      
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        相关资源
        最近更新 更多