C语言十六进制数据同字符串的相互转换

#include "stdafx.h"  
#include <string>  
#include <iostream>  
#include <cctype>  
#include <algorithm>  
/*
入口参数:pSrc  源十六进制数据
出口参数:dest  存放运算结果
    返回:true  转换成功
          false 失败
*/ 
bool Hex2String(unsigned char *pSrc,std::string &dest,int nL) 

    char buf[256]; 
    memset((char *)buf,0,sizeof(buf)); 
    unsigned char hb; 
    unsigned char lb; 
    for(int i=0;i<nL;i++) 
    { 
        hb=(pSrc[i]&0xf0)>>4; 
        if( hb>=0 && hb<=9 ) 
            hb += 0x30; 
        else if( hb>=10 &&hb <=15 ) 
            hb = hb -10 + 'A'; 
        else 
            return false; 
        lb = pSrc[i]&0x0f; 
        if( lb>=0 && lb<=9 ) 
            lb += 0x30; 
        else if( lb>=10 && lb<=15 ) 
            lb = lb - 10 + 'A'; 
        else 
            return false; 
        buf[i*2]   = hb; 
        buf[i*2+1] = lb; 
    } 
    dest = buf; 
    return true; 

/*
入口参数:src  源字符串
出口参数:dest  存放运算结果
    返回:true  转换成功
          false 失败
*/ 
bool String2Hex(std::string &src,unsigned char *dest) 

    unsigned char hb; 
    unsigned char lb; 
    if(src.size()%2!=0) 
        return false; 
    transform(src.begin(), src.end(), src.begin(), toupper); 
    for(int i=0, j=0;i<src.size();i++) 
    { 
        hb=src[i]; 
        if( hb>='A' && hb<='F' ) 
            hb = hb - 'A' + 10; 
        else if( hb>='0' && hb<='9' ) 
            hb = hb - '0'; 
        else 
            return false; 
        i++; 
        lb=src[i]; 
        if( lb>='A' && lb<='F' ) 
            lb = lb - 'A' + 10; 
        else if( lb>='0' && lb<='9' ) 
            lb = lb - '0'; 
        else 
            return false; 
        dest[j++]=(hb<<4)|(lb); 
    } 
    return true; 

//下面是使用举例,在VisualStudio2008+SP1中调试通过  
int _tmain(int argc, _TCHAR* argv[]) 

    unsigned char srcB[]={0x12,0x34,0x56,0x78,0x90,0xab,0xbc,0xcd,0xde,0xef};   
    std::string strDest; 
    Hex2String(srcB,strDest,sizeof(srcB)); 
    std::cout<<"HexToString:"<<strDest<<std::endl; 
    if(String2Hex(strDest,srcB)) 
        std::cout<<"StringToHex:Success!"<<std::endl; 
    else 
        std::cout<<"StringToHex:Failed!"<<std::endl; 
    return 0; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值