Пример #1
0
        private void BtnHexToAscii_Click(object sender, EventArgs e)
        {
            rtbOutput.Text = string.Empty;
            if (string.IsNullOrEmpty(rtbInput.Text))
            {
                return;
            }
            btnHexToAscii.Enabled = false;

            var content = rtbInput.Text;

            _ = Task.Run(async() =>
            {
                try
                {
                    string str = Encoding.ASCII.GetString(StringByteUtils.StringToBytes(content));
                    await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
                    {
                        rtbOutput.AppendText(str);
                    })), EndInvoke);
                }
                catch
                {
                    MessageBox.Show("请正确输入需要转换的内容");
                }
                finally
                {
                    await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
                    {
                        btnHexToAscii.Enabled = true;
                    })), EndInvoke);
                }
            });
        }
Пример #2
0
        private void btnCrc_Click(object sender, EventArgs e)
        {
            var value = tbIn.Text;

            byte[] data = cbIsAscii.Checked ? Encoding.Default.GetBytes(value) : StringByteUtils.StringToBytes(value);

            tbCrc16.Text     = StringByteUtils.BytesToString(CRC.Crc16(data, data.Length));
            tbCrcc.Text      = StringByteUtils.BytesToString(CRC.CRC16_C(data));
            tbUpdateCRC.Text = StringByteUtils.BytesToString(StringByteUtils.GetBytes(CRC.UpdateCRC(data, data.Length), true));
            tbGBcrc16.Text   = $"##{value.Length.ToString().PadLeft(4, '0')}{value}{StringByteUtils.BytesToString(CRC.GBcrc16(data, data.Length)).Replace(" ", "")}";
            tbHBcrc16.Text   = $"##{value.Length.ToString().PadLeft(4, '0')}{value}{StringByteUtils.BytesToString(CRC.HBcrc16(data, data.Length)).Replace(" ", "")}";
        }
Пример #3
0
 /// <summary>
 /// 2字节或4字节转换为整数
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void MS_ToInt_Click(object sender, EventArgs e)
 {
     byte[] IntByte = StringByteUtils.StringToBytes(txtData.SelectedText);
     if (IntByte.Length == 2)
     {
         MessageBox.Show(BitConverter.ToInt16(IntByte, 0).ToString(), "整数值");
     }
     else
     {
         MessageBox.Show(BitConverter.ToInt32(IntByte, 0).ToString(), "整数值");
     }
 }
Пример #4
0
        private void BtnHexToFloat_Click(object sender, EventArgs e)
        {
            rtbOutput.Text = string.Empty;
            if (string.IsNullOrEmpty(rtbInput.Text))
            {
                return;
            }
            btnHexToFloat.Enabled = false;

            string[] splitStr = rtbInput.Text.Split('\n');

            _ = Task.Run(async() =>
            {
                var stringBuilder = new StringBuilder();
                for (int j = 0; j < splitStr.Length; j++)
                {
                    try
                    {
                        byte[] Data = StringByteUtils.StringToBytes(splitStr[j]);
                        if (Data.Length % 4 != 0)
                        {
                            MessageBox.Show("请正确输入数据!(每一行字节数必须是4的倍数)[第" + (j + 1) + "行]");
                        }
                        for (int i = 0; i < Data.Length / 4; i++)
                        {
                            if (cbHB.Checked)
                            {
                                byte[] temp = new byte[4];
                                Array.Copy(Data, i * 4, temp, 0, 4);
                                Array.Reverse(temp);
                                stringBuilder.Append(BitConverter.ToSingle(temp, 0).ToString() + tbSplit.Text);
                            }
                            else
                            {
                                stringBuilder.Append(BitConverter.ToSingle(Data, i * 4).ToString() + tbSplit.Text);
                            }
                        }
                    }
                    catch
                    {
                        MessageBox.Show("请正确输入需要转换的内容![第" + (j + 1) + "行]");
                    }
                    stringBuilder.Append('\n');
                }
                await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
                {
                    rtbOutput.AppendText(stringBuilder.ToString());
                    btnHexToFloat.Enabled = true;
                })), EndInvoke);
            });
        }
Пример #5
0
 private async void AutoReply_LoadAsync(object sender, EventArgs e)
 {
     foreach (var item in await Global.AutoReplyConfig !.GetAsync())
     {
         DataGridViewRow         row = new DataGridViewRow();
         DataGridViewTextBoxCell key = new DataGridViewTextBoxCell();
         key.Value = item.Key;
         row.Cells.Add(key);
         DataGridViewTextBoxCell value = new DataGridViewTextBoxCell();
         value.Value = StringByteUtils.BytesToString(item.Value.value);
         row.Cells.Add(value);
         DataGridViewTextBoxCell delay = new DataGridViewTextBoxCell();
         delay.Value = item.Value.delayTime;
         row.Cells.Add(delay);
         dataGridView1.Rows.Add(row);
     }
 }
Пример #6
0
        private void BtnFloatToHex_Click(object sender, EventArgs e)
        {
            rtbOutput.Text = string.Empty;
            if (string.IsNullOrEmpty(rtbInput.Text))
            {
                return;
            }
            btnFloatToHex.Enabled = false;

            string[] splitStr = rtbInput.Text.Split('\n');

            _ = Task.Run(async() =>
            {
                var stringBuilder = new StringBuilder();
                for (int j = 0; j < splitStr.Length; j++)
                {
                    string[] items = splitStr[j].Split(new string[] { tbSplit.Text }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < items.Length; i++)
                    {
                        try
                        {
                            float tempf  = float.Parse(items[i]);
                            byte[] tempb = BitConverter.GetBytes(tempf);
                            if (cbHB.Checked)
                            {
                                Array.Reverse(tempb);
                            }
                            stringBuilder.Append(StringByteUtils.BytesToString(tempb));
                        }
                        catch
                        {
                            MessageBox.Show("请输入正确要转换的数[第" + (j + 1) + "行,第" + (i + 1) + "个]");
                        }
                    }
                    stringBuilder.Append('\n');
                }
                await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
                {
                    rtbOutput.AppendText(stringBuilder.ToString());
                    btnFloatToHex.Enabled = true;
                })), EndInvoke);
            });
        }
Пример #7
0
        public byte[] ToBytes()
        {
            var dataLength = BitConverter.GetBytes(_data.Length / 2);
            var byteCount  = (byte)_data.Length;
            var startAddr  = StringByteUtils.GetBytes(_registerAddress, true);
            var head       = new byte[]
            {
                _deviceAddress,
                0x10,
                startAddr[0],
                startAddr[1],
                dataLength[1],
                dataLength[0],
                byteCount
            };
            var temp = StringByteUtils.ComibeByteArray(head, _data);
            var crc  = CRC.Crc16(temp, temp.Length);

            return(StringByteUtils.ComibeByteArray(temp, crc));
        }
Пример #8
0
        private void BtnAsciiToHex_Click(object sender, EventArgs e)
        {
            rtbOutput.Text = string.Empty;
            if (string.IsNullOrEmpty(rtbInput.Text))
            {
                return;
            }
            btnAsciiToHex.Enabled = false;

            var content = rtbInput.Text;

            _ = Task.Run(async() =>
            {
                string hexStr = StringByteUtils.BytesToString(Encoding.ASCII.GetBytes(content));
                await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
                {
                    rtbOutput.AppendText(hexStr);
                    btnAsciiToHex.Enabled = true;
                })), EndInvoke);
            });
        }
Пример #9
0
 private async void dataGridView1_CellEndEditAsync(object sender, DataGridViewCellEventArgs e)
 {
     if (!string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells["key"].Value?.ToString()))
     {
         try
         {
             var key   = StringByteUtils.StringToBytes(dataGridView1.Rows[e.RowIndex].Cells["key"].Value.ToString() !);
             var value = StringByteUtils.StringToBytes(dataGridView1.Rows[e.RowIndex].Cells["value"].Value?.ToString() ?? "");
             if (int.TryParse(dataGridView1.Rows[e.RowIndex].Cells["delay"].Value?.ToString() ?? "0", out var delay))
             {
                 await Global.AutoReplyConfig !.AddOrUpdateAsync(key, value, delay);
             }
             else
             {
                 await Global.AutoReplyConfig !.AddOrUpdateAsync(key, value);
             }
         }
         catch (Exception)
         {
         }
     }
 }
Пример #10
0
 /// <summary>
 /// 8字节转换为双精度浮点数
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void MS_ToDouble_Click(object sender, EventArgs e)
 {
     byte[] IntByte = StringByteUtils.StringToBytes(txtData.SelectedText);
     MessageBox.Show(BitConverter.ToDouble(IntByte, 0).ToString(), "双精度浮点数值");
 }
Пример #11
0
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="data">字节数组</param>
        public async Task AddDataAsync(byte[] data, bool isSend = false)
        {
            switch (EncodeType)
            {
            case DataEncode.Hex:
                //16进制显示
                var sb = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sb.AppendFormat("{0:x2}" + " ", data[i]);
                }
                await AddContentAsync(sb.ToString().ToUpper(), isSend);

                if ((!isSend) && _drawChart)
                {
                    dynamic rs;
                    switch (_dataType)
                    {
                    case DataType.Float:
                        rs = StringByteUtils.ToSingle(data, (int)_startIndex !, (bool)!_isLow !);
                        break;

                    case DataType.int16:
                        rs = StringByteUtils.ToInt16(data, (int)_startIndex !, (bool)!_isLow !);
                        break;

                    case DataType.int32:
                        rs = StringByteUtils.ToInt32(data, (int)_startIndex !, (bool)!_isLow !);
                        break;

                    case DataType.int64:
                        rs = StringByteUtils.ToInt64(data, (int)_startIndex !, (bool)!_isLow !);
                        break;

                    default: return;
                    }
                    _ = await Task.Factory.FromAsync(BeginInvoke(new Action(async() =>
                    {
                        if (realtimeChart1.Series[0].Count > _count)
                        {
                            realtimeChart1.Series[0].Delete(0);
                        }
                        var time = DateTime.Now;
                        realtimeChart1.Series[0].Add(time.ToOADate(), rs);
                        if (_History)
                        {
                            string path = Path.Combine(Environment.CurrentDirectory, "History");
                            if (!string.IsNullOrEmpty(_path))
                            {
                                path = Path.Combine(path, _path);
                            }
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }
                            byte[] rsw = Encoding.Default.GetBytes($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} {rs}\n");
                            using var fs = new FileStream(Path.Combine(path, $"{DateTime.Now:yyyyMMdd}_有效数.txt"), FileMode.Append, FileAccess.Write, FileShare.Read, 8, FileOptions.WriteThrough);
                            await fs.WriteAsync(rsw, 0, rsw.Length);
                            await fs.FlushAsync();
                        }
                    })), EndInvoke);
                }
                break;

            case DataEncode.ASCII:
                //ASCII码显示
                await AddContentAsync(Encoding.ASCII.GetString(data), isSend);

                break;

            case DataEncode.UTF8:
                //UTF8显示
                await AddContentAsync(Encoding.UTF8.GetString(data), isSend);

                break;

            case DataEncode.GB2312:
                //GB2312显示
                await AddContentAsync(Encoding.GetEncoding("GB2312").GetString(data), isSend);

                break;
            }
            await Task.Factory.FromAsync(BeginInvoke(new Action(() =>
            {
                if (isSend)
                {
                    lbSCount.Text = (int.Parse(lbSCount.Text) + data.Length).ToString();
                }
                else
                {
                    lblCount.Text = (int.Parse(lblCount.Text) + data.Length).ToString();
                }
            })), EndInvoke);
        }