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); } }); }
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(" ", "")}"; }
/// <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(), "整数值"); } }
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); }); }
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); } }
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); }); }
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)); }
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); }); }
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) { } } }
/// <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(), "双精度浮点数值"); }
/// <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); }