CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何将16进制字符串转换成byte[]数组?

楼主javist()2006-12-02 18:41:54 在 .NET技术 / C# 提问

如字符串“12B3C4”转换成{0x12,0xB3,0xC4}的byte[]数组。  
  问题点数:20、回复次数:15Top

1 楼zhaochong12(超级大笨鸟)回复于 2006-12-02 19:04:20 得分 0

byte[]   byteArray   =   new   byte[]   {   0x01,   200   };  
  string   s   =   System.Text.Encoding.Unicode.GetString   (byteArray   );  
  byte[]   array   =   System.Text.Encoding.Unicode.GetBytes(s);  
  Top

2 楼zhaochong12(超级大笨鸟)回复于 2006-12-02 19:08:08 得分 0

哦,   不好意思..   弄错了,   这个是16进制转换成字符的  
   
   
  int       i;        
      byte[]       bytes;        
      string       str       =       Console.ReadLine();        
           
      try        
      {        
      i       =       System.Int32.Parse(str,System.Globalization.NumberStyles.AllowHexSpecifier);        
      bytes       =       BitConverter.GetBytes(i);        
           
      char[]       chars       =       (new       System.Text.ASCIIEncoding()).GetChars(bytes);        
      char       c       =       chars[0];        
      chars[0]       =       chars[1];        
      chars[1]       =       c;        
           
      Console.WriteLine(chars);        
      }        
      catch(Exception       ex)        
      {        
      Console.WriteLine(ex.Message);        
      }        
  Top

3 楼zhaochong12(超级大笨鸟)回复于 2006-12-02 19:11:13 得分 0

 
  再给个char[]转换byte[]  
   
  char[]       mChars=new       char[]{'a','b','c'};            
      byte[]       mBytes=System.Text.Encoding.Default.GetBytes(mChars);Top

4 楼believefym(feng)回复于 2006-12-02 19:39:18 得分 0

刚学c#,写了一个简陋的,很多api还不会用  
                          string   str   =   "12B3C4";  
                          byte[]   bs   =   new   byte[str.Length   /   2];  
                          char   []ch   =   str.ToUpper().ToCharArray();  
                          Console.WriteLine(str.ToUpper());  
                          for   (int   i   =   0;   i   <   ch.Length;   i   +=   2)  
                          {  
                                  byte   b   =   (byte)0;  
                                  if   (ch[i]   >=   '0'   &&   ch[i]   <=   '9')  
                                          b   +=   (byte)((ch[i]   -   '0')   *   16);  
                                  else   if   (ch[i]   >=   'A'   &&   ch[i]   <=   'F')  
                                          b   +=   (byte)((ch[i]   -   'A'   +   10)   *   16);  
   
                                  if   (ch[i+1]   >=   '0'   &&   ch[i+1]   <=   '9')  
                                          b   +=   (byte)((ch[i+1]   -   '0'))   ;  
                                  else   if   (ch[i+1]   >=   'A'   &&   ch[i+1]   <=   'F')  
                                          b   +=   (byte)((ch[i+1]   -   'A'   +   10))   ;  
   
                                  bs[i/2]   =   b;  
                          }  
                          foreach(byte   tmp   in   bs)  
                                  Console.WriteLine(""+tmp+"\t");Top

5 楼kmblack1(black)回复于 2006-12-02 19:55:41 得分 0

byte[]可以有两种表现方式,一种是10进制,一种是十六进制,对于byte[]来说,两者都是一样  
  直接用GetString就可以了,你用断点可以看得很清楚Top

6 楼liujia_0421(SnowLover)回复于 2006-12-02 20:39:33 得分 0

string   s   =   "12B3C4";  
                          byte[]   array   =   new   byte[s.Length   /   2];  
                          for   (int   i   =   0;   i   <   s.Length   /   2;   i++)  
                          {  
                                  string   str   =   s.Substring(i,   2);  
                                  array[i]   =(byte   )   Convert.ToInt32(str   ,16);  
                                  Console.WriteLine(Convert.ToString(array[i],   16));  
                          }Top

7 楼javist()回复于 2006-12-02 21:03:34 得分 0

to:zhaochong12(笨鸟)    
  为什么要加下面语句?  
      char       c       =       chars[0];        
      chars[0]       =       chars[1];        
      chars[1]       =       c;        
  Top

8 楼believefym(feng)回复于 2006-12-02 21:26:55 得分 0

liujia_0421  
  这个简单Top

9 楼javist()回复于 2006-12-03 09:49:04 得分 0

c#有没有现成的函数?Top

10 楼liujia_0421(SnowLover)回复于 2006-12-03 11:02:36 得分 0

TO:c#有没有现成的函数?  
   
  System.Text.Encoding.Unicode.GetBytes(str)这个函数是将字符串转成二进制数组的,但不符合你的要求,它是将字符串的每个字符转成二进制...Top

11 楼javist()回复于 2006-12-04 18:04:01 得分 0

经过验证liujia_0421()的方法错,“aaaa”出来的是{0x61,0x61,0x61,0x61}  
  正确应该是{0xaa,0xaa}才对。Top

12 楼liujia_0421(SnowLover)回复于 2006-12-04 18:17:45 得分 0

测试如下:  
  string   s   =   "aaaa";  
                          byte[]   array   =   new   byte[s.Length   /   2];  
                          for   (int   i   =   0;   i   <   s.Length   /   2;   i++)  
                          {  
                                  string   str   =   s.Substring(i,   2);  
                                  array[i]   =   (byte)Convert.ToInt32(str,   16);  
                                  Console.WriteLine("输出十进制:"+array[i]);  
                                  Console.WriteLine("输出十六进制:"+Convert.ToString(array[i],   16));  
                          }  
  输出如下:  
  输出十进制:170  
  输出十六进制:aa  
  输出十进制:170  
  输出十六进制:aa  
   
  我不知道你为什么作的测试会是0x61...  
   
  的确在字节数组中存的数是两个170,而不是你想要的0xaa...  
   
  但只是一个形式的不同,本质上是相等的...  
   
  难道十进制的170不等于十六进制的aa?  
   
  道理上是一样的...  
  Top

13 楼lr21shiji(睿睿)回复于 2006-12-04 19:34:32 得分 0

用tobase64可以  
  Top

14 楼javist()回复于 2006-12-05 18:06:30 得分 0

我是用一个文本框的文本“aaaaaaaaaaa……”作测试的,是不定长度的字符串,例如“12cdb23422a……”转换后是{0x12,0xcd,0x23,0x42,0x2a……}Top

15 楼KissApple(菊花普洱茶)回复于 2006-12-15 15:54:25 得分 0

///   <summary>   Convert   a   string   of   hex   digits   (ex:   E4   CA   B2)   to   a   byte   array.   </summary>  
                  ///   <param   name="s">   The   string   containing   the   hex   digits   (with   or   without   spaces).   </param>  
                  ///   <returns>   Returns   an   array   of   bytes.   </returns>  
                  private   byte[]   HexStringToByteArray(string   s)  
                  {  
                          s   =   s.Replace("   ",   "");  
                          byte[]   buffer   =   new   byte[s.Length   /   2];  
                          for   (int   i   =   0;   i   <   s.Length;   i   +=   2)  
                                  buffer[i   /   2]   =   (byte)Convert.ToByte(s.Substring(i,   2),   16);  
                          return   buffer;  
                  }  
   
  我试过了以上代码可以将近55   43   54   65   ff这样的字符串转成byte数组发送出去,你可以根据你的需要修改一下Top

相关问题

关键词

得分解答快速导航

  • 帖主:javist

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo