VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1532|回复: 5

[求助] 字符串“76A01481”怎么转换成16进制?

[复制链接]
35_avatar_middle
online_vip 发表于 2016-6-13 18:41:19 | 显示全部楼层 |阅读模式
3驿站币
char szData[MAX_PATH] = {0};
memcpy_s(szData,MAX_PATH,"76A01481",strlen("76A01481"));
CString str;
str.Format("%d",atoi(szData));
OutputDebugString(str);

这样转换是错的,我想了一下,"76A01481"是字符串,而76A01481是16进制,所以这样转换不成功的,所以问问大神们,这应该怎么转换?





上一篇:我怎么没有组件
下一篇:寻数字签名证书给我软件签名,QQ2289630673.价钱好谈
51_avatar_middle
online_admins 发表于 2016-6-13 23:13:05 | 显示全部楼层
十六进制字符串转换成十进制的话,可以使用 sscanf 来操作
17_avatar_middle
在线会员 发表于 2016-6-14 09:21:07 | 显示全部楼层
        if (argc < 1)
        {
                printf("Usage:Test [字符串]");
                return -1;
        }
        char szData[100] = {0};
        long lRet = 0;
        memset(szData, 0, sizeof(szData));
        strncpy(szData, argv[1], sizeof(szData)-1);
        int nLen = strlen(szData);
        for (int i=0; i<nLen; i++)
        {
                char ch = szData[i];
                if (ch >= '0' && ch<='9')
                {
                        lRet = lRet * 16 + ch - '0';
                }
                else if (ch>='A' && ch<='F')
                {
                        lRet = lRet * 16 + (ch - 'A' + 10);
                }else if (ch>='a' && ch<='f')
                {
                        lRet = lRet * 16 + (ch - 'a' + 10);
                }
        }
        printf("lRet = %x", lRet);
        system("pause");
        return 0;
78_avatar_middle
online_vip 发表于 2016-6-14 10:50:44 | 显示全部楼层
  • #include "stdio.h"
  • int main()
  • {
  •         char* pdata{ new char[20] };
  •         pdata = "76A01481";
  •         printf("原数据内容:%s \n", pdata);
  •         printf("转换为16进制后:");
  •         for (int i = 0; i < 8; i++)
  •         {
  •                 printf("0x%x ", pdata);
  •         }
  •         printf("\n");
  • }

字符串“76A01481”怎么转换成16进制?
24_avatar_middle
在线会员 发表于 2016-6-14 14:25:28 | 显示全部楼层
您说得是Hex吗?
20_avatar_middle
online_vip 发表于 2016-6-23 11:21:39 | 显示全部楼层
std::string HexString_Encrypt(const char* data, int len) {
        const static char hexdig[] = "0123456789ABCDEF";
        int i;
        const unsigned char *p;
        std::string result;

        if (!data || !len)
                return result;

        for (i = 0, p = (const unsigned char*)data;
                i < len;
                ++i, ++p) {
                result.append(1, hexdig[(*p >> 4) & 0xf]);
                result.append(1, hexdig[*p & 0xf]);
        }

        return result;
}

std::string HexString_Decrypt(const char* data, int len) {
        std::string result;
        unsigned char ch, cl, *p;
        if (!data || len % 2) {
                return result;
        }

        for (p = (unsigned char *)data; *p;) {
                ch = *p++;

                cl = *p++;

                if (!cl) {
                        result.clear();
                        return result;
                }
                if (isupper(ch))
                        ch = tolower(ch);
                if (isupper(cl))
                        cl = tolower(cl);

                if ((ch >= '0') && (ch <= '9'))
                        ch -= '0';
                else if ((ch >= 'a') && (ch <= 'f'))
                        ch -= 'a' - 10;
                else
                        goto badhex;

                if ((cl >= '0') && (cl <= '9'))
                        cl -= '0';
                else if ((cl >= 'a') && (cl <= 'f'))
                        cl -= 'a' - 10;
                else
                        goto badhex;

                result.append(1, (unsigned char)((ch << 4) | cl));
        }

        return result;

badhex:
        result.clear();
        return result;
}
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-19 12:49

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表