byte 8bit 可表示 0~255
ushort 16bit 可表示 0~65535 // 6万
uint 32bit 可表示 0~42 9496 7295 // 42亿 Dword类型
ulong 64bit 可表示 0~1844 6744 0737 0955 1615 // 两个卧槽
sbyte 8bit 可表示 -128~127
short 16bit 可表示 -32768~32767 // 3万
int 32bit 可表示 -2147483648~2147483647 // 21亿
long 64bit 可表示 -9223372036854775808~9223372036854775807 //卧槽。。。
九年义务的参与者,我也不知道是多大
float 32bit小数 // 3.1415926f // -7.654f
double 64bit小数 // 3.14159d //可以不加d -98.7654
decimal 128bit小数 -98.76m 3.14m
object 盒子类型 //数据是二进制保存的,相当于截取二进制长度
dynamic 动态类型,运行的时候确定; dynamic d = 20;
char* 指针类型 char* cptr; int* iptr;
bool 1bit false,true//假,真 逻辑关系
char 16bit 相当于照片的编号,输入索引值,显示出对应文字/符号的照片 '\u0000'到'\uFFFF'
string 字符串类型,是连续的char的倍数长度,一般用于输出连续文字和符号
StringBuilder 可变字符串:StringBuilder 坤=new StringBuilder("坤",49);// 最大49字
DateTime 时间类型 string ATtime = DateTime.Now.ToString("ss's'ffff:");// xx秒xxxx毫秒
class 对象类型(参数引用类型传递)
struct 对象结构体类型(参数值类型传递)
enum 枚举类型(有明确范围个数的,比如星期)
union 共用体(最大类型容器)
byte[,] 数组类型(引用类型)new byte[8, 13];
static byte[,] buffer = new byte[8, 13];
int a = 65535;
int b = (byte)a;
object a = 65535;
int b = (byte)a;
主要用于string转值类型
int num = int.Parse("12345");
double num2 = double.Parse("-123.45");
int num3 = 13579;
string str = num3.ToString();
Int64 e= unchecked((Int64)(0x8000000000000000));
int Bytelen = sizeof(decimal); // 16 byte
// 这种写法一般用于PLC输出或单片机LED指示灯
int num = 0b00001111; //二进制写法 0b开头
num = 0b111 << 5; // 1110 0000
num = 1 << 7; // 1000 0000
// 常规用法
decimal pai = 3.14159f;
pai = 12345m;
pai = 255;
pai = 0xff; // 十六进制
pai = 0B00001111; //0x0f
textBox3.Text += "你好!" + '\u000d' + '\u000a'; // 0x0000 到 0xFFFF
// h d o b 十六进制,十进制,八进制,二进制
int a = 0xffff;
a = 123456;
a = 0777;
a = 0b00010001;
int qc = sizeof(decimal);// 16字节 128 bit
qc= sizeof(byte);//1
qc= sizeof(double );//8
qc = sizeof(float);//4
qc = sizeof(bool);//1
qc = sizeof(short);//2
qc = sizeof(int);//4
qc = sizeof(double);//8字节
qc = sizeof( 人类 );// 字节大小由《元素种子》大小决定。
int a = 65535;
int b = Convert.ToByte(a);
bool a = false;
bool b = Convert.ToBoolean(a);
Convert.ToByte(a);// 8bit正数
Convert.ToUInt16(a);
Convert.ToUInt32(a);
Convert.ToUInt64(a);
Convert.ToSByte(a);// 8bit可负数
Convert.ToInt16(a);
Convert.ToInt32(a);
Convert.ToInt64(a);
Convert.ToSingle(a); // float
Convert.ToDouble(a);
Convert.ToDecimal(a); // 十进制数
Convert.ToChar(a); // 汉字
Convert.ToString(a); // 字符串
Convert.ToDateTime(a); // 时间类型
Convert.FromBase64String("字符串转8bit的数组");
byte[] u8buffer = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 };
string str = Convert.ToBase64String(u8buffer); // .FromBase64String 的逆过程
Convert.ToString("01234567");
Convert.ToString(0x01234567);
//其他的方法自己去看方法原型
可以使用C#中的Array.Reverse()方法来实现byte数组的首尾调换。
具体实现方法如下:
public static byte[] ReverseBytes(byte[] bytes)
{
Array.Reverse(bytes);
return bytes;
}
该方法接受一个byte数组作为参数,使用Array.Reverse()方法将数组中的元素进行反转,
然后返回反转后的byte数组。使用该方法可以轻松地实现byte数组的首尾调换。
字符串转数组:
//===1=================
string str = "hello";
byte[] byteArray = Encoding.ASCII.GetBytes(str);
foreach (byte b in byteArray)
{
Console.Write(b + " "); // 输出:104 101 108 108 111
}
//===2===将字符串值“01 02 03 04 05”转换为对应数组值0x01 0x02 0x03 0x04 0x05的C#代码:
string str = "01 02 03 04 05";
string[] strArr = str.Split(' ');
byte[] byteArr = new byte[strArr.Length];
for (int i = 0; i < strArr.Length; i++)
{
byteArr[i] = Convert.ToByte(strArr[i],16);
}
foreach (byte b in byteArr)
{
Console.Write("0x{0:X2} ", b);
}
运行结果为:0x01 0x02 0x03 0x04 0x05
//===3=================
string str = "01 02 03";
byte[] arr = str.Split(' ').Select(temp => "0x" + temp).Select(temp => (byte)Convert.ToInt32(temp, 16)).ToArray();
数组转字符串:
//===4==================
byte[] byteArray = new byte[] { 104, 101, 108, 108, 111 };
string str = Encoding.ASCII.GetString(byteArray);
Console.WriteLine(str); // 输出:hello
//===5=================
byte[] arr = new byte[] { 0x01, 0x02, 0x03 };
string str = BitConverter.ToString(arr).Replace("-", " ");
Console.WriteLine(str); // 输出:01 02 03
单个char是16bit 最大值 0xFFFF;
byte num =Convert.ToByte(“FF”,16) ;
1 转换 .ToString();
2 二进制 Convert.ToString(0x7F,2);
3 八进制 Convert.ToString(0x7F,8);
4 十进制 Convert.ToString(0x7F,10);
5 十六进制 Convert.ToString(0x7F,16);
6 十六进制格式1 num.ToString("X4"); //补0
7 格式2 String.Format("{0,-20:X8}",num);//左对齐,总长20,十六进制长度8,补空白
小写16进制显示 : num.ToString("x4"); //补0 最短4位长度的小写16进制
#region 数组转等效字符串
public string BytesToHexStrings(byte[] data)//change转换 , byte[ ]等效的string
{
string str = string.Empty;
for (int i = 0; i < data.Length; i++)
{
str += data[i].ToString("X2");
}
return str;
}
#endregion
#region 字符串转等效数组
public byte[] StringsToHexBytes(string data)//change转换,string等效的byte[]
{
//清除所有空格
string str = data.Replace(" ", "");
//若字符个数为奇数,补一个0
str += str.Length % 2 != 0 ? "0" : "";
byte[] bytes = new byte[str.Length / 2];//用于返回结果
for (int i = 0, c = bytes.Length; i < c; i++)//获取bytes值
{
bytes[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
}
return bytes;
}
#endregion
这个一般用于类似串口这样的设备, 串口每次帧是 8bit的数据,这样字符串需要转换成8bit的数组才能批量发送。
string txbuffer = "串口要发送的数据。";
byte[] tx = Encoding.Unicode.GetBytes(txbuffer);
string rx = Encoding.Unicode.GetString(tx);// 解码
string txbuffer = "串口要发送的数据。";
byte[] tx = Encoding.Unicode.GetBytes(txbuffer);
string rx = Encoding.Unicode.GetString(tx);// 解码
string txbuffer2 = "要发送的数据。";
tx=Encoding.ASCII.GetBytes(txbuffer2);
rx=Encoding.ASCII.GetString(tx);// 解码
Encoding.UTF8.GetBytes
Encoding.UTF8.GetString
Encoding.BigEndianUnicode.GetBytes
Encoding.BigEndianUnicode.GetString
Encoding.UTF7.GetBytes
Encoding.UTF7.GetString
string ATtime = DateTime.Now.ToString("ss's'ffff:");// xx秒xxxx毫秒
DateTime dateTime = DateTime.Now; // 获取当前时间
string str=dateTime.ToString("ss's'fff"); // XX秒XXX毫秒
string[] formats = {"d", "D", "f", "F", "g", "G", "m", "o", "r",
"s", "t", "T", "u", "U", "Y"};
// fff 毫秒3位
// ss 秒 2位
// YYYY 年 4位数
// 其它自己去测试
其他转换,我目前还没有用到。大家可以留言。