C#中各种字符类型的转化,使用于串口通信
//C#中各种字符类型的转化,使用于串口通信------------
//字符长度的理解
string s = "我是一个2兵";
int len = s.Length;//6个字符
byte[] sarr = System.Text.Encoding.Default.GetBytes(s);
len = sarr.Length;//11个字节
//10进制转字符串,也没有意义,要转成对应的ascii码
int t1 = 81;
string s1 = t1.ToString();
//这个10进制转对应ASCII字符才有意义。
s1 = ((char)t1).ToString();
//16进制转字符串:这个没有意义。就是tostring了。
int intAB = 0x16;
s1 = intAB.ToString();
//16进制转对应ASCII字符:
byte babb = 0x45;
string ass = ((char)babb).ToString();
//ASCII字符串转10进制数
string tr = "2Ab刘";
string d ="";
for (int i = 0; i < tr.Length; i++)
{
int ii = (int)Convert.ToChar(tr.Substring(i, 1));
d = d +" "+ ii.ToString();
}
//ASCII字符串转16进制数
string s2 = "2Ab刘";
byte[] ba = System.Text.ASCIIEncoding.Default.GetBytes(s2);
StringBuilder sb = new StringBuilder();
foreach (byte b in ba)
{
sb.Append(b.ToString("x") + " ");
}
//16进制数转10进制
int intA = 0x16;//定义的时候是必须带0x的
string strA = "16";//字符串可以不带
int intA1 = Convert.ToInt32(intA);
int intA2 = Convert.ToInt32(strA, 16);
//10进制转16进制
strA = Convert.ToString(intA2, 16);
//10进制转2进制,16进制类似
int int10 = 10;
string str2 = Convert.ToString(int10,2);
//2进制转10进制
int10 = Convert.ToInt32(str2,2);
int iValue;
byte[] bs;
string sValue;
iValue = Convert.ToInt32("0C",16); // 16进制->10进制
bs = System.BitConverter.GetBytes(iValue); //int->byte[]
sValue = System.Text.Encoding.ASCII.GetString(bs); //byte[]-> ASCII
//C#中各种字符类型的转化,使用于串口通信------------
//字符长度的理解
string s = "我是一个2兵";
int len = s.Length;//6个字符
byte[] sarr = System.Text.Encoding.Default.GetBytes(s);
len = sarr.Length;//11个字节
//10进制转字符串,也没有意义,要转成对应的ascii码
int t1 = 81;
string s1 = t1.ToString();
//这个10进制转对应ASCII字符才有意义。
s1 = ((char)t1).ToString();
//16进制转字符串:这个没有意义。就是tostring了。
int intAB = 0x16;
s1 = intAB.ToString();
//16进制转对应ASCII字符:
byte babb = 0x45;
string ass = ((char)babb).ToString();
//ASCII字符串转10进制数
string tr = "2Ab刘";
string d ="";
for (int i = 0; i < tr.Length; i++)
{
int ii = (int)Convert.ToChar(tr.Substring(i, 1));
d = d +" "+ ii.ToString();
}
//ASCII字符串转16进制数
string s2 = "2Ab刘";
byte[] ba = System.Text.ASCIIEncoding.Default.GetBytes(s2);
StringBuilder sb = new StringBuilder();
foreach (byte b in ba)
{
sb.Append(b.ToString("x") + " ");
}
//16进制数转10进制
int intA = 0x16;//定义的时候是必须带0x的
string strA = "16";//字符串可以不带
int intA1 = Convert.ToInt32(intA);
int intA2 = Convert.ToInt32(strA, 16);
//10进制转16进制
strA = Convert.ToString(intA2, 16);
//10进制转2进制,16进制类似
int int10 = 10;
string str2 = Convert.ToString(int10,2);
//2进制转10进制
int10 = Convert.ToInt32(str2,2);
int iValue;
byte[] bs;
string sValue;
iValue = Convert.ToInt32("0C",16); // 16进制->10进制
bs = System.BitConverter.GetBytes(iValue); //int->byte[]
sValue = System.Text.Encoding.ASCII.GetString(bs); //byte[]-> ASCII
ConvertExample
using System;
using System.Text;
namespace ConvertExample
{
class ConvertExampleClass
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi(\u03a0)";
// Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte[].
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
}
using System;
using System.Text;
namespace ConvertExample
{
class ConvertExampleClass
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi(\u03a0)";
// Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte[].
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
}
Code
public string EncodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s);
for(int i = 0; i < arrByte.Length; i++)
{
result += System.Convert.ToString(arrByte[i], 16); //Convert.ToString(byte,16)把byte转化成十六进制string
}
return result;
}
public string DecodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = new byte[s.Length / 2];
int index = 0;
for(int i = 0; i < s.Length; i += 2)
{
arrByte[index++] = Convert.ToByte(s.Substring(i,2),16); //Convert.ToByte(string,16)把十六进制string转化成byte
}
result = System.Text.Encoding.Default.GetString(arrByte);
return result;
}
public string EncodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s);
for(int i = 0; i < arrByte.Length; i++)
{
result += System.Convert.ToString(arrByte[i], 16); //Convert.ToString(byte,16)把byte转化成十六进制string
}
return result;
}
public string DecodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = new byte[s.Length / 2];
int index = 0;
for(int i = 0; i < s.Length; i += 2)
{
arrByte[index++] = Convert.ToByte(s.Substring(i,2),16); //Convert.ToByte(string,16)把十六进制string转化成byte
}
result = System.Text.Encoding.Default.GetString(arrByte);
return result;
}
加码解码的规则如下:
加码时将字符串中的所有字符转换成其对应的ASCII值的16进制值,例如:“A”的ASCII码值为65,以16进制值表示
为41,故应发送两个字符“41”以代表字符“A”。
对于汉字则以其内码的16进制值来表示,如“测试”应为:B2E2CAD4。
Code
string aaa = "AB测试";
byte[] bbb = System.Text.Encoding.Default.GetBytes(aaa);
string ccc = System.Text.Encoding.Default.GetString(bbb);
for(int i = 0; i < bbb.Length; i++)
{
Response.Write(System.Convert.ToString(bbb[i], 16));
}
Response.Write(ccc);
string aaa = "AB测试";
byte[] bbb = System.Text.Encoding.Default.GetBytes(aaa);
string ccc = System.Text.Encoding.Default.GetString(bbb);
for(int i = 0; i < bbb.Length; i++)
{
Response.Write(System.Convert.ToString(bbb[i], 16));
}
Response.Write(ccc);
以上内容均来自互联网