请问有什么高效地方法将char型字符数据转换成USHORT、int型数据

JinxLeader 2016-05-17 03:14:19
我有一个char型指针,指向的内容是“0123456789abcdef”的字符数组,我现在想要将其转换成USHORT型数据{0123,4567,89ab,........}.

由于数据有约1M大小,故使用sscanf(pcTemp,"%X",pusTemp); sscanf函数速率太慢,

请问有什么更为高效地办法将char型数据转换成USHORT型数据。
...全文
184 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2016-05-17
  • 打赏
  • 举报
回复
strtoul 可能会快些, 自己写个循环可能更快

BYTE Char2Bin(char ch)
{
  BYTE b = 0;
  if(ch >= '0' && ch <= '9')
  {
    b = ch - '0';
  }
  else if(ch >= 'a' && ch <= 'f')
  {
    b = ch - 'a' + 10;
  }
  else if(ch >= 'A' && ch <= 'F')
  {
    b = ch - 'A' + 10;
  }
  else
  {
    ASSERT(FALSE);
  }
  return b;
}

void Test()
{
  LPCSTR sSrc = "0123456789abcdef";
  
  int iSrcLen = strlen(sSrc);
  for(int i=0; i<iSrcLen-4; i+=4)
  {
    USHORT sVal = 0;
    sVal <<= 4;  sVal |= Char2Bin(sSrc[i+0]); 
    sVal <<= 4;  sVal |= Char2Bin(sSrc[i+1]); 
    sVal <<= 4;  sVal |= Char2Bin(sSrc[i+2]); 
    sVal <<= 4;  sVal |= Char2Bin(sSrc[i+3]); 
    
    TRACE(_T("%c%c%c%c=%04XH\n"), sSrc[i+0], sSrc[i+1], sSrc[i+2], sSrc[i+3], sVal);
  }
}
赵4老师 2016-05-17
  • 打赏
  • 举报
回复
仅供参考,不一定对:
//char型指针,指向的内容是“0123456789abcdef”的字符数组,我现在想要将其转换成USHORT型数据{0123,4567,89ab,........}.
#define MAXUS 512000
char s[]="0123456789abcdef";
unsigned short us[MAXUS];
int i,j;
inline unsigned short hex(char c) {
    if ('0'<=c && c<='9') return (unsigned short)(c-'0');
    if ('a'<=c && c<='f') return (unsigned short)(c-'a'+10);
    if ('A'<=c && c<='F') return (unsigned short)(c-'A'+10);
    return 0;
}
int main() {
    i=0;
    j=0;
    while (1) {
        if (s[j  ]==0) break;
        if (s[j+1]==0) break;
        if (s[j+2]==0) break;
        if (s[j+3]==0) break;
        us[i]=hex(s[j  ])<<12
             |hex(s[j+1])<< 8
             |hex(s[j+2])<< 4
             |hex(s[j+3]);
        i++;
        if (i>=MAXUS) break;
        j+=4;
    }
    j=i;
    for (i=0;i<j;i++) printf("%04hx ",us[i]);
    return 0;
}
Eleven 2016-05-17
  • 打赏
  • 举报
回复
自己解析,四个字符一组~
用户 昵称 2016-05-17
  • 打赏
  • 举报
回复
原来你的源数据是字符串,你想转换成二进制数据,这个sscanf的办法,赚效率低的话,自己写估计也差不多。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧