将一字符串转换换成十六进制数并计算和

时间:2020-12-21 19:33:53
如何将一组字符串转换成十六进制数,并计算出这些十六进制数的和?

6 个解决方案

#1


CString str ="0x30,0x40";
int x,y;
sscanf(str,"%x,%x",&x,&y);
str.Format("%x",x+y);
//str.Format("%d",x+y);

#2


技术上可行
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
(3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
    如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
    同时在www.****.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.

#3


举个例子先?

一组字符串----什么字符串?

#4


CString str;
str.Format("%x", 16);

#5


字符串是字符和数字,有大写和小写字母还包括数字0--9

#6


以前别人写的,我改了改,不知道对楼主有没有帮助。

/*------------------------------------------------------------

  函数名 : TransData(CString InStr, PUCHAR OutStr)

  功  能 : 将字符串转换成十六进制数据

  参  数 : CString InStr [in] 输入字符串

  PUCHAR OutStr [out] 输出转换后数据的指针

  返回值 : BOOL,正确返回TRUE,错误返回FALSE

------------------------------------------------------------*/
BOOL TransData(CString InStr, PUCHAR OutStr)
{
UINT        i = 0, j = 0;
UINT    len = 0;
UCHAR       Str[KEY_LEN * 2];

len = InStr.GetLength();

if ((len % 2) != 0)
{
MessageBox("请按要求输入!", "错误", MB_OK | MB_ICONERROR);
return FALSE;
}

memset(OutStr, 0, sizeof(UCHAR[KEY_LEN]));
memset(Str, 0, sizeof(UCHAR[KEY_LEN * 2]));
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
{
MessageBox("数据格式错误!", "错误", MB_OK | MB_ICONERROR);
return FALSE;
}
}

i = 0;
while(i < len)
{ // 转换
Str[j] = Str[i] * 16 + Str[i + 1];
i += 2;
j++;
}

memcpy(OutStr, Str, j);

return TRUE;

}

#1


CString str ="0x30,0x40";
int x,y;
sscanf(str,"%x,%x",&x,&y);
str.Format("%x",x+y);
//str.Format("%d",x+y);

#2


技术上可行
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
(3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
    如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
    同时在www.****.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.

#3


举个例子先?

一组字符串----什么字符串?

#4


CString str;
str.Format("%x", 16);

#5


字符串是字符和数字,有大写和小写字母还包括数字0--9

#6


以前别人写的,我改了改,不知道对楼主有没有帮助。

/*------------------------------------------------------------

  函数名 : TransData(CString InStr, PUCHAR OutStr)

  功  能 : 将字符串转换成十六进制数据

  参  数 : CString InStr [in] 输入字符串

  PUCHAR OutStr [out] 输出转换后数据的指针

  返回值 : BOOL,正确返回TRUE,错误返回FALSE

------------------------------------------------------------*/
BOOL TransData(CString InStr, PUCHAR OutStr)
{
UINT        i = 0, j = 0;
UINT    len = 0;
UCHAR       Str[KEY_LEN * 2];

len = InStr.GetLength();

if ((len % 2) != 0)
{
MessageBox("请按要求输入!", "错误", MB_OK | MB_ICONERROR);
return FALSE;
}

memset(OutStr, 0, sizeof(UCHAR[KEY_LEN]));
memset(Str, 0, sizeof(UCHAR[KEY_LEN * 2]));
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
{
MessageBox("数据格式错误!", "错误", MB_OK | MB_ICONERROR);
return FALSE;
}
}

i = 0;
while(i < len)
{ // 转换
Str[j] = Str[i] * 16 + Str[i + 1];
i += 2;
j++;
}

memcpy(OutStr, Str, j);

return TRUE;

}