由于台达提供通讯协议是PDF版的里面的地址无法复制,
用C#写一个小工具,用来计算台达PLC地址
涉及到一些数制转换的问题,做了以下的记录,个人觉得可以延用到其他程序中,
把方法共享出来供大家探讨
下面是我的小工具的界面:
台达PLC的通讯地址
X,Y寄存器是8进制地址
T,M,D等寄存器为16进制地址
涉及的地址的进制类型如下
HEX:十六进制
OCT:八进制
DEC:十进制
下面是我自己写的小笔记:
*C#中的数据都是用十进制进行显示和运算的,
其他进制的字符都要通过转换的方式才能进行显示和运算
在C#中各进制字符的表示方法:
常量表示:eg.十进制下的16
①八进制:020 这个需要商榷,我查到的资料C#的八进制是0作为前缀的,但实际的计算结果出现问题还是以十进制进行计算的
②十进制:16
③十六进制:0x10
④二进制:0b10000
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 进制转换测试
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//C#中的数制默认是十进制的
//即:
//①从外部传进来的字符默认转换为10进制运算,
//②在代码里默认也是按十进制显示
//③如果涉及到其他进制则需要进制转换后运算或者显示
//计算:将传入的字符默认转换为十进制的数值,C#底层还是以十进制进行算数运算
//计算:如果传入的字符是其他进制(如十六进制),要把该字符转换为十进制的整数再运算string->int
//显示:C#计算后是十进制整型的结果,如果要显示为其他进制的,用Convert方法进行转换int->string
//以下是示例:
//一.字符转int
//string→int
//把以下各进制的字符转换为int型(结果是十进制的)
int oct = Convert.ToInt32("20", 8); //结果:[oct=16(十进制)]即:八进制字符"20"→十进制16
int hex = Convert.ToInt32("10", 16); //结果:[hex=16(十进制)]即:十六进制字符"10"→十进制16
int dec = Convert.ToInt32("16"); //结果:[dec=16(十进制)]即:十进制字符"16"→十进制16,二者一致
int bin = Convert.ToInt32("10000", 2);//结果:[dec=16(十进制)]即:二进制的"10000"→十进制16
textBox1.AppendText("字符转各进制整数");
textBox1.AppendText(oct + "\r\n");
textBox1.AppendText(hex + "\r\n");
textBox1.AppendText(dec + "\r\n");
textBox1.AppendText(bin + "\r\n");
//二.int转字符型
//int→string
//int型的数值转换为其他进制的字符用于显示
string octStr = Convert.ToString(10, 8); //十进制的10→转换为八进制的字符显示,结果是:"12"
string hexStr = Convert.ToString(10, 16); //十进制的10→转换为十六进制字符显示:结果是:"A"
string binStr = Convert.ToString(10, 2); //十进制的10→转换为二进制的字符显示:结果是:"1010"
//三.运算示例:
textBox1.AppendText("各进制整形常量的计算,显示结果是十进制字符");
//常量运算
//C#中的常量默认是十进制,如果是十六进制加0X 前缀表示 ,二进制:前面加 0b 前缀
textBox1.AppendText((0X10 + 0X1) + "\r\n");//十六进制加法运算,结果17(十进制)
textBox1.AppendText((010 + 010) + "\r\n");
//**??八进制数值常量运算,按我查到的规则八进制的常量应该是以0前缀,但是计算结果不对,按十进制算
//*??尚待商榷!!!
textBox1.AppendText((10 + 1) + "\r\n");//十进制加法运算(系统默认),结果11(十进制)
textBox1.AppendText((0b111 + 0b111) + "\r\n");//二进制加法运算,结果14(十进制)
}
}
}