我是网络编程的初学者。我开始连接体重秤并在我的文本框中获取刻度数字

Posted

技术标签:

【中文标题】我是网络编程的初学者。我开始连接体重秤并在我的文本框中获取刻度数字【英文标题】:i am beginner in ,net programming.i am starting to connect with weigh scale and get scale digit in my textbox 【发布时间】:2017-10-11 08:43:18 【问题描述】:

当我执行我的代码时,当重量发生变化时它可以正常工作。但问题是我的文本框显示 01B 等。请帮助我找出代码中的错误。我希望它是人类可读格式的 int,如 0546 等。

if (InvokeRequired)     //<-- Makes sure the function is invoked to work properly in the UI-Thread
    BeginInvoke(new Closure(() =>  SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); ));     //<-- Function invokes itself
else

    while (_serialPort.BytesToRead > 0) //<-- repeats until the In-Buffer is empty
    
        int dataLength = _serialPort.BytesToRead;
        byte[] data = new byte[dataLength];
        int nbrDataRead = _serialPort.Read(data, 0, dataLength);
        if (nbrDataRead == 0)
            return;
        string str = System.Text.Encoding.UTF8.GetString(data);
        textBox1.Text = str.ToString();

    

【问题讨论】:

04C, 03N ,03D, 04F,这是什么,十六进制?因为是缓冲区的真实字符串值 003 是十六进制值:/ 您需要检查您需要哪种格式并转换值,您没有告诉我们您需要的格式类型 当然我需要 int 格式 0030kg 等 我只想知道为什么文本框显示 04C, 03N ,03D, 04F 而不是数字权重:/ 【参考方案1】:

您需要将获取的十六进制重量转换为十进制:

 string str = GetValidNumber(System.Text.Encoding.UTF8.GetString(data));
 int dec = int.Parse(str, System.Globalization.NumberStyles.HexNumber);
 textBox1.Text = dec.ToString() + "kg";

您需要检查字符串中的有效 ascii 字符,以便您可以使用以下方法:

 public string GetValidNumber(String numberToValid)
    
        string validNumber = "";
        bool isValidChar = false;

        try
        
            for (int i = 0; i < numberToValid.Length; i++)
            
                isValidChar = CheckAsciiChar(numberToValid[i].ToString());

                if (isValidChar)
                    validNumber += numberToValid[i];
            
            return validNumber;
        
        catch (Exception ex)            
    

    private bool CheckAsciiChar(string c)
    
        bool isValid = false;
        try
        
            byte[] asciiBytes = Encoding.ASCII.GetBytes(c);

            for (int i = 48; i <= 57; i++)
            
                if (asciiBytes[0] == i)
                    isValid = true;
            

            for (int i = 65; i <= 90; i++)
            
                if (asciiBytes[0] == i)
                    isValid = true;
            

            for (int i = 97; i <= 122; i++)
            
                if (asciiBytes[0] == i)
                    isValid = true;
            

            if (asciiBytes[0] == 250)
                isValid = true;

            return isValid;
        
        catch (Exception ex)            
    

【讨论】:

它的显示异常消息输入字符串格式不正确 在哪个车道?? int dec = int.Parse(str, System.Globalization.NumberStyles.HexNumber);在这一行 你能告诉我str的价值吗? 这是文本框01Bkg中字符串的输出值

以上是关于我是网络编程的初学者。我开始连接体重秤并在我的文本框中获取刻度数字的主要内容,如果未能解决你的问题,请参考以下文章

悬停图像时如何放置GIF?

如何使来自不同类的文本字段等于相同的文本?

更改屏幕方向时视频不会同时播放

在我的机器上操作大向量时,CUDA 推力很慢

如何剪切部分文本并用Python和RegEx替换每一行

每次我尝试在我的 android 设备中运行代码时都会收到此错误。我是应用程序开发的初学者。我正在使用 VScode