请教字符串转换问题!改变注册表参数问题!100分在线等~~

时间:2022-12-07 15:33:46
各位高手:
       请教怎么将一个字符串转换为16进制和2进制呢?在改变注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\000000000001的PackedCatalogItem参数时,该参数为16进制。我想把它改变成我希望的值有什么好方法呢?请指教!万分感谢!~~

                                                     caven

10 个解决方案

#1


unsigned long strtoul( const char *nptr, char **endptr, int base );
该函数可以将16进制的字符串转换为10进制整数

#2


字符串到16进制:
char szItem[] = "123456";
ULONG ulItem = strtoul(szItem, NULL, 16);
TRACE("Item: %u\n", ulItem);

字符串到10进制:
char szItem[] = "123456";
ULONG ulItem = strtoul(szItem, NULL, 10);
TRACE("Item: %u\n", ulItem);

#3


////////////////////////////////////////////////////////////////////////
DWORD DataToHexStr(char *out,BYTE *data,DWORD size)
{
DWORD i,j;
char *pbuf=out;
for(i=0;i<size;i++)
{
if((i&15)==0)
{
pbuf+=wsprintf(pbuf,"%04X:",i);
}
if((i&15)==8) *pbuf++='-'; else *pbuf++=' ';
pbuf+=wsprintf(pbuf,"%02X",data[i]);
if((i&15)==15)
{
pbuf+=wsprintf(pbuf,"    ");
for(j=i&~15;j<=i;j++)
if(data[j]>=' '&&data[j]<=0x7e) *pbuf++=data[j];
else *pbuf++='.';
*pbuf++='\r';
*pbuf++='\n';
}
}
if((i&15)!=0)
{
for(j=i;j<15;j++)
pbuf+=wsprintf(pbuf,"   ");
pbuf+=wsprintf(pbuf,"    ");
for(j=i&~15;j<=i;j++)
if(data[j]>=' '&&data[j]<=0x7e) *pbuf++=data[j];
else *pbuf++='.';
*pbuf++='\r';
*pbuf++='\n';
}
*pbuf=0;
return pbuf-out;
}

#4


八仙过海,各显神通~

int iRet = StrToInt("1234");

转化数值到字符同laiyiling(【龙工一号●CSDN】) 兄。

#5


对了,上面的记得
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )

还有用sscanf也可以啊:
int iRet = 0;
sscanf("1234","%d",&iRet);

#6


对了上面的记得包含文件:
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )

还有其实还可以用:
int iRet = 0;
sscanf("1234","%d",&iRet);

^_^

#7


谢谢大家的指点~~我在后来发现,我要修改的这个注册表键值(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\000000000001的PackedCatalogItem)还不能用字符串来处理,键值里面的内容有很多0间隔着.那我要得到该键值的全部内容的话,我应该使用什么类型的数据来保存呢?高手们有什么良策吗?

#8


这是我写的这部分代码,请高手们指正~:
HKEY   hkey;
int ret0=-1;
ret0=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\WinSock2\\Parameters\\Protocol_Catalog9\\Catalog_Entries\\000000000001",0,KEY_READ,&hkey);
if(ret0!=ERROR_SUCCESS)
{
AfxTrace(_T("得到注册表KEY失败\n"));
}  
TCHAR  Pack_Get[MAX_PATH];
int ret1=-1;  
DWORD type=REG_SZ;
ret1=RegQueryValueEx(hkey, "PackedCatalogItem", NULL, &type, (LPBYTE)Pack_Get, &dwbuflen);
if(ret1!=ERROR_SUCCESS) 
        { 
 AfxTrace(_T("错误:无法查询有关注册表信息!"));
        }

//我要得到的内容就存在Pack_Get中,但是这里面只有该键值的前一部分,被0隔着的后面一部分数据丢失了..........

#9


你把它放到结构里,不就可以了?

#10


sprintf也可以啊

#1


unsigned long strtoul( const char *nptr, char **endptr, int base );
该函数可以将16进制的字符串转换为10进制整数

#2


字符串到16进制:
char szItem[] = "123456";
ULONG ulItem = strtoul(szItem, NULL, 16);
TRACE("Item: %u\n", ulItem);

字符串到10进制:
char szItem[] = "123456";
ULONG ulItem = strtoul(szItem, NULL, 10);
TRACE("Item: %u\n", ulItem);

#3


////////////////////////////////////////////////////////////////////////
DWORD DataToHexStr(char *out,BYTE *data,DWORD size)
{
DWORD i,j;
char *pbuf=out;
for(i=0;i<size;i++)
{
if((i&15)==0)
{
pbuf+=wsprintf(pbuf,"%04X:",i);
}
if((i&15)==8) *pbuf++='-'; else *pbuf++=' ';
pbuf+=wsprintf(pbuf,"%02X",data[i]);
if((i&15)==15)
{
pbuf+=wsprintf(pbuf,"    ");
for(j=i&~15;j<=i;j++)
if(data[j]>=' '&&data[j]<=0x7e) *pbuf++=data[j];
else *pbuf++='.';
*pbuf++='\r';
*pbuf++='\n';
}
}
if((i&15)!=0)
{
for(j=i;j<15;j++)
pbuf+=wsprintf(pbuf,"   ");
pbuf+=wsprintf(pbuf,"    ");
for(j=i&~15;j<=i;j++)
if(data[j]>=' '&&data[j]<=0x7e) *pbuf++=data[j];
else *pbuf++='.';
*pbuf++='\r';
*pbuf++='\n';
}
*pbuf=0;
return pbuf-out;
}

#4


八仙过海,各显神通~

int iRet = StrToInt("1234");

转化数值到字符同laiyiling(【龙工一号●CSDN】) 兄。

#5


对了,上面的记得
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )

还有用sscanf也可以啊:
int iRet = 0;
sscanf("1234","%d",&iRet);

#6


对了上面的记得包含文件:
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )

还有其实还可以用:
int iRet = 0;
sscanf("1234","%d",&iRet);

^_^

#7


谢谢大家的指点~~我在后来发现,我要修改的这个注册表键值(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\000000000001的PackedCatalogItem)还不能用字符串来处理,键值里面的内容有很多0间隔着.那我要得到该键值的全部内容的话,我应该使用什么类型的数据来保存呢?高手们有什么良策吗?

#8


这是我写的这部分代码,请高手们指正~:
HKEY   hkey;
int ret0=-1;
ret0=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\WinSock2\\Parameters\\Protocol_Catalog9\\Catalog_Entries\\000000000001",0,KEY_READ,&hkey);
if(ret0!=ERROR_SUCCESS)
{
AfxTrace(_T("得到注册表KEY失败\n"));
}  
TCHAR  Pack_Get[MAX_PATH];
int ret1=-1;  
DWORD type=REG_SZ;
ret1=RegQueryValueEx(hkey, "PackedCatalogItem", NULL, &type, (LPBYTE)Pack_Get, &dwbuflen);
if(ret1!=ERROR_SUCCESS) 
        { 
 AfxTrace(_T("错误:无法查询有关注册表信息!"));
        }

//我要得到的内容就存在Pack_Get中,但是这里面只有该键值的前一部分,被0隔着的后面一部分数据丢失了..........

#9


你把它放到结构里,不就可以了?

#10


sprintf也可以啊