您的位置:新葡亰496net > 奥门新萄京娱乐场 > 中如何将十进制数的字符串转化成十六进制数的

中如何将十进制数的字符串转化成十六进制数的

发布时间:2019-12-10 13:46编辑:奥门新萄京娱乐场浏览(122)

      这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习。说到分割字符串,我首先想到的是Split,但根据本例分割要求无法直接使用,需要进行一些处理。通过比较,我觉得常用于截取字符串的substring函数可以较方便的解决该问题,故记录下来方便与大家交流、学习。(相信一定有更好的处理方法,希望各位不吝赐教)

    1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制 Console.WriteLine("十进制166的二进制表示: " Convert.ToString(166, 2)); //十进制转八进制 Console.WriteLine("十进制166的八进制表示: " Convert.ToString(166, 8)); //十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: " Convert.ToString(166, 16)); //二进制转十进制 Console.WriteLine("二进制 111101 的十进制表示: " Convert.ToInt32("111101", 2)); //八进制转十进制 Console.WriteLine("八进制 44 的十进制表示: " Convert.ToInt32("44", 8)); //十六进制转十进制 Console.WriteLine("十六进制 CC的十进制表示: " Convert.ToInt32("CC", 16)); Int32.Parse 方法将十六进制整数的字符串表示形式转换为十进制整数 //十六进制转十进制 Int32.Parse("CC", System.Globalization.NumberStyles.AllowHexSpecifier); 2.在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换 // private string StringToHexString(string s,Encoding encode) { byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组 string result = string.Empty; for (int i = 0; i < b.Length; i )//逐字节变为16进制字符,以%隔开 { result = "%" Convert.ToString(b[i], 16); } return result; } private string HexStringToString(string hs, Encoding encode) { //以%分割字符串,并去掉空字符 string[] chars = hs.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries); byte[] b = new byte[chars.Length]; //逐个字符变为16进制字节数据 for (int i = 0; i < chars.Length; i ) { b[i] = Convert.ToByte(chars[i], 16); } //按照指定编码将字节数组变为字符串 return encode.GetString(b); } 字符串转16进制字节数组 /// ///字符串转16进制字节数组 /// /// /// privatestaticbyte[] strToToHexByte(stringhexString) { hexString=hexString.Replace("",""); if((hexString.Length%2)!=0) hexString =""; byte[] returnBytes=newbyte[hexString.Length/2]; for(inti=0; i ///字节数组转16进制字符串 /// /// /// publicstaticstringbyteToHexStr(byte[] bytes) { stringreturnStr=""; if(bytes!=null) { for(inti=0; i ///从汉字转换到16进制 /// /// ///编码,如"utf-8","gb2312" ///是否每字符用逗号分隔 /// publicstaticstringToHex(strings,stringcharset,boolfenge) { if((s.Length%2)!=0) { s ="";//空格 //throw new ArgumentException("s is not valid chinese string!"); } System.Text.Encoding chs=System.Text.Encoding.GetEncoding(charset); byte[] bytes=chs.GetBytes(s); stringstr=""; for(inti=0; i ///从16进制转换成汉字 /// /// ///编码,如"utf-8","gb2312" /// publicstaticstringUnHex(stringhex,stringcharset) { if(hex==null) thrownewArgumentNullException("hex"); hex=hex.Replace(",",""); hex=hex.Replace("n",""); hex=hex.Replace("\",""); hex=hex.Replace("",""); if(hex.Length%2!=0) { hex ="20";//空格 } //需要将 hex 转换成 byte 数组。 byte[] bytes=newbyte[hex.Length/2]; for(inti=0; i

    一.String类的方法


     1. Trim():清除字符串两端的空格  

    一.该程序的主要目的/功能

    1. ToLower():将字符串转换为小写

    原数据如下图所示(十六进制数据):

     3. Equals():比较两个字符串的值,bool

     图片 1

     4. IndexOf(value)字符串值在指定字符串中首次出现的位置(如果找不到指定位置,则返回-1)

    原数据4byte表示一个数(即图中第一个数是7E51,第二个是75BA……),需要将原数据

     5. SubString(int startIndex,int length):

    按指定长度(4byte)分割成新的字符串,然后转化为十进制的数:

    从startIndex位置开始截取length长的字符串

    图片 2

        SubString(0,10)

    运行界面:

     案例:    static void Main(string[] args)     

    图片 3

         {           

    /*左边文本框是十六进制的原数据,右边是按长度为4(byte)分割后转化得到的相应的十进制数*/

      #region C#中如何将十进制数的字符串转化成十六进制数的字符串,按指定长度分割字符串。中常用的字符串方法        

    二.程序代码

    图片 4图片 5

      1 using System;
      2 using System.Text;
      3 using System.Windows.Forms;
      4 using System.IO;
      5 using System.Text.RegularExpressions;
      6 
      7 namespace StringOperate
      8 {
      9     public partial class Form1 : Form
     10     {
     11         public Form1()
     12         {
     13             InitializeComponent();
     14         }
     15 
     16         /// <summary>
     17         /// 去掉字符串中的空格、回车和换行,然后按指定长度进行分割
     18         /// </summary>
     19         /// <param name="str">待处理的字符串</param>
     20         /// <returns></returns>
     21         static string[] strProcess(string str)
     22         {            
     23             string strProcessed;
     24             string pass = @"[trns]";
     25             strProcessed = Regex.Replace(str, pass, "");  //去掉、回车、换行、空格
     26             int strLength = strProcessed.Length;          //统计经处理后的字符长度
     27             //判断待处理的字符串长度是否符合要求,并给出提示
     28             if (strLength % 4 != 0)
     29             {
     30                 int absenceNum = 4-strLength % 4;
     31                 string notification = $"注意:请检查数据是否完整!rn[提示:数据似乎缺少{absenceNum}位数字数符]";
     32                 MessageBox.Show(notification, "Tips", MessageBoxButtons.OK, MessageBoxIcon.Information);
     33             }
     34             int byteLength = strProcessed.Length / 4;       //统计分割后字符数组长度,数组中每个元素长度为四个字节
     35             string[] strArrayH = new string[byteLength];    //存放十六进制字符串
     36             int[] dateDecimal = new int[byteLength];        //存放转换后的十进制数据
     37             //将字符串分割为长度为4的字符数组
     38             for (int i=0;i<(byteLength);i=i 1)
     39             {
     40                 try
     41                 {
     42                     strArrayH[i]= strProcessed.Substring(4*i,4);//i-起始位置,4-子串长度
     43                 }
     44                 catch (Exception e)
     45                 {
     46                     MessageBox.Show(e.ToString(),"异常提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
     47                     continue;
     48                 }                
     49             }
     50             return strArrayH;
     51         }
     52 
     53         private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
     54         {
     55             string mydate;
     56             OpenFileDialog Ofdlg = new OpenFileDialog();
     57             openFileDialog1.Filter = "Word工作簿97-2003(*.doc)|*.doc|txt files (*.txt)|*.txt|All files (*.*)|*.*";
     58             openFileDialog1.FileName = "default";
     59             openFileDialog1.FilterIndex = 2;
     60             openFileDialog1.Title = "请选择待处理的数据文本"; //对话框的标题
     61 
     62             if (openFileDialog1.ShowDialog()==DialogResult.OK)
     63             {
     64                 FileStream myfile = new FileStream(openFileDialog1.FileName,FileMode.Open,FileAccess.Read);
     65                 //使用System.Text.Encoding.Defaul告诉StreamReader采用目前操作系统的编码,避免出现乱码
     66                 StreamReader SR = new StreamReader(myfile,Encoding.Default);
     67                 mydate = SR.ReadToEnd();
     68                 try
     69                 {                    
     70                     textBox1.Text = mydate;
     71                     SR.Close();
     72                 }
     73                 catch (Exception ex)
     74                 {
     75                     MessageBox.Show("打开文件出错:"   ex.Message);
     76                 }
     77             }
     78         }
     79 
     80         //将文本按指定长度分割
     81         private void 分割字符串ToolStripMenuItem_Click(object sender, EventArgs e)
     82         {
     83             textBox2.Text = "";
     84             string myContentBefore;
     85             string[] myContentAfter;            
     86             myContentBefore = textBox1.Text.Trim();
     87             myContentAfter = strProcess(myContentBefore);
     88             int[] dateDecimal = new int[myContentAfter.Length];
     89             for (int i = 0; i < myContentAfter.Length; i  )
     90             {
     91                 try
     92                 {
     93                     dateDecimal[i] = Convert.ToInt32(myContentAfter[i], 16);
     94                 }
     95                 catch (Exception ex)
     96                 {
     97                     MessageBox.Show(ex.ToString(),"提示");
     98                     continue;
     99                 }
    100                 finally
    101                 {
    102                     /*
    103                      * textBox2.Text = (textBox2.Text   " "   dateDecimal[i].ToString()).Trim();
    104                      * textBox2.Text  = dateDecimal[i].ToString()   " ";
    105                      * 当数据较多时,上面两种给textBox的赋值方式响应较慢,程序可能出现假死
    106                      * 需要频繁更新TextBox(追加文本)时,AppendText能够稳定的即时更新,而且高效
    107                      */
    108                     textBox2.AppendText(dateDecimal[i].ToString() " ");
    109                 }              
    110             }
    111             textBox2.Text = textBox2.Text.TrimEnd();
    112 
    113         }
    114 
    115         //清空textbox1的内容
    116         private void 清除text1ToolStripMenuItem_Click(object sender, EventArgs e)
    117         {
    118             textBox1.Text = "";
    119         }
    120 
    121         //清空textbox2的内容
    122         private void 清除text2ToolStripMenuItem_Click(object sender, EventArgs e)
    123         {
    124             textBox2.Text = "";
    125         }
    126 
    127         private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
    128         {
    129             StreamWriter mySteam;
    130             SaveFileDialog Sfdlg = new SaveFileDialog();
    131             saveFileDialog1.Filter= " Word文档97-2003(*.doc)|*.doc|txt files(*.txt)|*.txt|Excel工作簿97-2003(*.xls)|*.xls|All files(*.*)|*.*";
    132             saveFileDialog1.FilterIndex = 2;                    //设置默认文件类型
    133             saveFileDialog1.FileName = "default1";                //设置文件的默认名称
    134             saveFileDialog1.RestoreDirectory = true;            //记忆上次打开位置
    135             if (saveFileDialog1.ShowDialog()== DialogResult.OK)
    136             {
    137                 mySteam = new StreamWriter(saveFileDialog1.FileName);
    138                 mySteam.Write(textBox2.Text.Trim());
    139                 //使用Flush()方法将所有信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这两种操作
    140                 mySteam.Flush();
    141                 mySteam.Close();       
    142             }
    143         }
    144     }
    145 }
    

    View Code

              string temp;      

    三.涉及的知识点

    1.分割字符串——Substring(int startIndex, int length)

       由于需要按4个字节长度来分割字符串,而原数据是每两个字节就有一个空格,所以无法直接通过Split方法进行分割。我想到了两种思路:①去掉第1、3、5、7……个空格以及回车、换行和制表字符,然后使用Split分割字符串;②去掉所有空格、回车、换行和制表符,然后通过循环取字符串的子串的方式而达到‘分割’字符串到字符数组的目的。我觉得第二种方法的思路更简单,所以采用的是第二种方法。(int startIndex——开始截取子串的位置,int length——子字符串的长度)

    2.数据访问——openFileDialog & saveFileDialog

      博客园介绍这方面知识的的文章很多,写的也非常好,这里就不再赘述。

    3.Convert类 ——ToInt32(string,IFormatProvider)

      使用指定的区域性特定格式信息,将数字的指定 String 表示形式转换为等效的 32 位有符号整数。如本例中Convert.ToInt32(string,16)——把十六进制的数字的字符串转换为效的 32 位有符号整数(十进制)。详细用法可参考Microsoft官网的.net开发文档:Convert类.aspx),Convert.ToInt32(string,IFormatProvider)方法.aspx)。

      写得比较匆忙,欢迎大家批评指正。

                do{                   

    中如何将十进制数的字符串转化成十六进制数的字符串,按指定长度分割字符串。   PickNameFormEmail();      

        Console.WriteLine("是否继续执行?(yes/no)");         

                 temp = Console.ReadLine().Trim().ToLower();    

                  } while (temp.Equals("yes"));   

               #endregion           

       Console.ReadLine();        

     }        

     //提取字符串     

         static void PickNameFormEmail()

    {            

      string email;       

           string name;

                 Console.WriteLine("请输入邮箱:");  

                email = Console.ReadLine();        

          Console.WriteLine("邮箱地址为{0}", email);     

             //从邮箱中提取@符号的位置           

      //IndexOf方法:找到指定字符串在email中的位置,如果没有找到则返回-1        

          int position=email.IndexOf("@");          

        //找到了@符号         

         if (position > 0)           

       {                 

    //1908852690@qq.com              

       name = email.Substring(0, position);        

              Console.WriteLine("邮箱用户名为{0}", name);          

        }              else              {    

                  Console.WriteLine("您输入的邮箱格式不正确");           

       }          }  

       6.string [] a;      

    a=string.Split('分隔符')  :根据分隔符进行字符串拆分得到一个字符串数组    

    7.string.Join("链接符",a); :根据连接符来链接数组中的每一项

    二.格式化

       C      货币格式             String.Format("{0,8:C3}",2000)      ¥2000.000

     D      十进制格式           String.Format("{0,8:D3}",2000)  2000

     F      小数点后位数固定     String.Format("{0,-8:F3}",2000)     2000.000  

    N      用逗号隔开的数字     String.Format("{0,-8:N}",250000)    250,000  

    P      百分比计数法         String.Format("{0,8:P3}",0.29768)   29.768%

     X      十六进制格式         String.Format("{0,-8:X000}",12)     C

     

    三.二进制

    1:

    0 0 0 0 0 1

    2:

    0 0 0 0 0 2

    0 0 0 0 1 0

    3:

    0 0 0 0 0 3

    0 0 0 0 1 1

    4:

    0 0 0 0 0 4

    0 0 0 0 2 0

    0 0 0 1 0 0

    5:

    0 0 0 0 0 5

    0 0 0 0 2 1

    0 0 0 1 0 1

    6:

    0 0 0 0 0 6

    0 0 0 0 3 0

    0 0 0 1 1 0

    四.类型转换

     1.隐式类型转换:自动类型转换

      对于任何数据类型A,只要其取值范围完全包含在类型B的取值范围内,那么就可以隐式转换为B   int类型可以隐式转换为 double 或者 float 类型   float 类型可以隐式转换为 double

     2.显式类型转换:强制类型转换

      2.1   将string类型转换为数值类型   string a="123";   int b=int.Parse(a);   double b=double.Parse(a);   float b=float.Parse(a);

      string类型转换为double,int,float类型

      2.2 将数值类型转换为string类型

       将 int 转换为 string    int b=1;       string a=b.ToString();

     

      2.3 Convert类:

                double a = 85.63;     

            int b;       

          float c;        

         string d;      

           b = Convert.ToInt32(a);  

               6     

            c = Convert.ToSingle(a);         

        d = Convert.ToString(a);    

             b=Convert.ToInt32(d);      

           Console.WriteLine("{0},{1},{2}",b,c,d);

     

                使用Convert类进行int类型转换是会四舍五入

     

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:中如何将十进制数的字符串转化成十六进制数的

    关键词:

上一篇:新葡亰496net访问修饰符,中访问修饰符

下一篇:没有了