Nano Hash - криптовалюты, майнинг, программирование

Как преобразовать Hex в ASCII на основе этого кода?

Основной вопрос здесь Как вывести вес с весов в текстовое поле через последовательный порт RS-232 или usb-конвертер?

Теперь я пытаюсь получить шестнадцатеричное значение, преобразовать его в ascii и отобразить.

Основной код это

public partial class MainForm : Form
{
    private SerialPort _serialPort; // formda kullanilacak degisken
    private const int BaudRate = 9600; // BaudRate Constant. default 9600 ile oynanabilir 
    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        this.MinimizeBox = false;
        string[] portNames = SerialPort.GetPortNames(); // bütün kullanilabilecek com portlari okur
        foreach (var portName in portNames)
        {
            comboBox1.Items.Add(portName); // Adds Ports to combobox
        }
        if (comboBox1.SelectedIndex != -1)
        {
            comboBox1.SelectedIndex = 0; // Selects first entry (convenience purposes)
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // This block ensures that no exceptions happen
        if (_serialPort != null && _serialPort.IsOpen)
            _serialPort.Close();
        if (_serialPort != null)
            _serialPort.Dispose();
        // End of Block

        _serialPort = new SerialPort(comboBox1.Text, BaudRate, Parity.None, 8, StopBits.One);  //<-- Creates new SerialPort using the name selected in the combobox

        _serialPort.DataReceived += SerialPortOnDataReceived; //<-- this event happens everytime when new data is received by the ComPort
        _serialPort.Open(); //<-- make the comport listen
        textBox1.Text = string.Format("Listening on {0}...", comboBox1.Text);

    //here i am trying @Adam Casey 's code and serialReceived thing doesn't work.
         byte[] serialReceived;
         string reading = Encoding.UTF8.GetString(serialReceived);
         textBox2.Text = reading.Substring(13);
    }
    private delegate void Closure();
    private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)
    {
        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
            {
                textBox1.Text += string.Format("{0:X2} ", _serialPort.ReadByte()); //<-- bytewise adds inbuffer to textbox
            }
        }
    }
15.05.2016

Ответы:


1

У меня есть опыт работы с Com-портом и RS232, если вы уточните свою проблему, я могу помочь.

Если ваша проблема заключается в простом преобразовании шестнадцатеричного значения на основе строки в ASCII, используйте следующее.

         //41 is ACII 'A'
        String hs = "41";
        var x = Convert.ToUInt32(hs, 16);
        StringBuilder sb= new StringBuilder();
        sb.Append(Convert.ToChar(x))
        String s = sb.ToString();

ИЗМЕНИТЬ в соответствии с вашим комментарием

033 ID_00: 10,6 кг собрано по следующему коду

 String hs = "x30 30 33 33 20 49 44 5F 30 30 3A 20 20 20 31 30 2E 36 20 6B 67 20 0D 0A 0D 0A";
            System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(hs, "([A-Z-0-9]{2}) ");
            StringBuilder sb = new StringBuilder();
            System.Text.RegularExpressions.Match m = match.NextMatch();
            while(m.Success)
            {
                var x = Convert.ToUInt32(m.Value.Trim(),16);
                sb.Append(Convert.ToChar(x));
               m= m.NextMatch();
            }


            String s = sb.ToString();

Если у вас есть какой-либо начальный символ, вы можете сначала подстроить его, но это регулярное выражение будет для вас mach par hex. Обратите внимание на это, и вы можете написать другой регулярный текст для сбора информации о кг, например, : (.+?) kg — это шаблон для сбора информации о кг из вашего представления ASCII.

15.05.2016
  • Я слушаю COM-порт 1 и получаю такие значения, как Listening on COM1... 30 30 33 33 20 49 44 5F 30 30 3A 20 20 20 31 30 2E 36 20 6B 67 20 0D 0A 0D 0A. я хочу получить их и изменить его на значение ascii и отобразить его на этикетке. 15.05.2016
  • извините, мой вывод такой. когда я получаю вывод с устройства в многострочное текстовое поле. моя программа зависает через 1 секунду. вот вывод; 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 20 38 30 20 20 20 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 20 38 30 20 20 20 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 38 30 20 20 20 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 20 38 30 20 20 20 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 20 38 30 20 20 20 20 20 30 30 0D 28 02 71 70 30 20 20 20 20 38 30 20 20 20 20 20 30 0D 28 02 71 70 30 20 20 20 20 38 30 20 20 20 и изображение: " rel="nofollow noreferrer">s32.postimg.org/mke80rwtx/IMG_20160515_143350.jpg 15.05.2016
  • Я не интегрировал весы таким образом, но могу предложить вам проверить параметры RS232. Скорость передачи данных, партия, управление потоком и т. д. Это весы кассира? 15.05.2016
  • нет, это для грузовиков. это было при 80 кг, когда я начал слушать comport1, потому что на нем стоял только 1 парень. 15.05.2016
  • Группа шестнадцатеричных данных, которыми вы поделились, возвращает много (qp0 80 0 Возможно, ваши данные поступают таким образом, и 80 представляет собой фактический вес. 15.05.2016
  • Если это так, вы можете написать другое регулярное выражение, например .+?qp(.+?)0, чтобы поймать вес, или вы можете использовать простые строковые операции для обработки. 15.05.2016
  • Да, это. я хочу получить эти данные одновременно, только вес. и показать его на этикетке. но замерзает через некоторое время. я не знаю, где хранить данные) первая и строковые операции, чтобы получить только вес и получить данные от него для метки. 15.05.2016
  • Просто используйте другой поток для связи, это решит вашу проблему с блокировкой потока пользовательского интерфейса, это выходит за рамки этого вопроса. Просто найдите SO stackoverflow.com/a/2605991/413032 15.05.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..