十六进制的字符串转换到十六进制byte数据

 

BOOL TransData(CString InStr,PUCHAR OutStr)     
{     
 UINT i=0, j=0;     
 UINT len=0;     
 
 len = InStr.GetLength();     
 if ((len % 2) != 0)     
 {    
  m_strError.Format("长度错误[%s][%d]",InStr,len);
  return FALSE;     
 } 
    UCHAR *Str = new UCHAR[len+1];
 memset(Str,0, len+1);     
 
 strcpy((char*)(Str),InStr.GetBuffer(0));     
 
 InStr.ReleaseBuffer();     
 for(i=0; i<len; i++)     
 {     
  if ((Str[i] > 47) && (Str[i] < 58))     
  {     
   Str[i] -= 48;     
  }     
  else if ((Str[i] > 64) && (Str[i] < 71))     
  {     
   Str[i] -= 55;     
  }     
  else if ((Str[i] > 96) && (Str[i] < 103))     
  {     
   Str[i] -= 87;     
  }     
  else    
  {     
   m_strError.Format("不是十六进制字符数据[%s][位置:%d]",InStr,i);
   delete [] Str;
   return   FALSE;     
  }     
 }
   
 i  = 0;     
 while(i < len)     
 {//转换     
  Str[j] = Str[i]*16 + Str[i+1];     
  i += 2;     
  j++;     
 }

 memcpy(OutStr,Str,len/2);

 delete [] Str;
 return TRUE;
}

 

//使用

CString str = “EF2A3B4D5E6F”;

int nLen = str.GetLength();

int nbufflen = nLen/2;
  byte *pbuff = new byte[nbufflen + 1];

ZeroMemory(pbuff,nbufflen + 1);
TransData(str,pbuff);



//转换byte【】到CString   

/*

byte data[] = {0xF2,0x1A,0xEF,0xcd,0xab,0x01,0x12,0x23,0x45,0x67,0x89,0x01};转换后

"F2 1A EF CD AB 01 12 23 45 67 89 01"  字符串

*/

byte Thrans(byte c)
{
    byte o;
    if (c >= 0x0 && c <= 0x9)
    {
        o = c + '0';
    }
    else if (c >= 0x0a && c <= 0x0f)
    {
        o = c + '0x0A' - 0x0A;
    }
    
    else
    {//出错
        int y = 0;
        y++;
    }
    
    return o;
}

CString Thrans(byte *pData,int nlen)
{
    CString strOut;

    for (int i=0; i< nlen; i++)
    {
        byte tbyte = pData[i];

        byte diwei = (tbyte >> 4) & 0x0f;
        byte gaowei = (tbyte) & 0x0f;
        
        byte r = Thrans(diwei);
        strOut += r;
        r = Thrans(gaowei);
        strOut += r;
        
        strOut += " ";
    }
    

    return strOut;
}

在C#中,可以使用BitConverter类来将十六进制字符串转换为字节数组。首先,我们需要将十六进制字符串转换为字节数组,然后再将字节数组转换十六进制字符串表示。下面是一个示例代码: ```csharp string hexString = "3132333435363738393a3b3c3d3e3f40"; byte[] byteArray = new byte = Convert.ToByte(hexString.Substring(i, 2), 16); } string result = BitConverter.ToString(byteArray).Replace("-", ""); Console.WriteLine(result); ``` 在上面的代码中,我们首先定义了一个十六进制字符串hexString。然后,我们创建了一个与十六进制字符串长度一半大小的字节数组byteArray。接下来,使用一个循环将每两个字符转换为一个字节,并将其存储到字节数组中。最后,使用BitConverter.ToString方法将字节数组转换十六进制字符串表示,并使用Replace方法去除其中的分隔符“-”。最终,将转换后的结果打印出来。 注意,上述代码中的hexString长度必须为偶数,否则会引发异常。另外,如果需要将转换后的字节数组以其他形式使用,可以根据具体需求进行进一步操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [16进制字符串字节字节数组](https://blog.csdn.net/weixin_28289089/article/details/117018463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值