请教怎么将一个字符串转换为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进制整数
该函数可以将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);
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;
}
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】) 兄。
int iRet = StrToInt("1234");
转化数值到字符同laiyiling(【龙工一号●CSDN】) 兄。
#5
对了,上面的记得
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )
还有用sscanf也可以啊:
int iRet = 0;
sscanf("1234","%d",&iRet);
#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);
^_^
#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隔着的后面一部分数据丢失了..........
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进制整数
该函数可以将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);
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;
}
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】) 兄。
int iRet = StrToInt("1234");
转化数值到字符同laiyiling(【龙工一号●CSDN】) 兄。
#5
对了,上面的记得
#include "shlwapi.h"
#pragma comment( lib,"shlwapi.lib" )
还有用sscanf也可以啊:
int iRet = 0;
sscanf("1234","%d",&iRet);
#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);
^_^
#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隔着的后面一部分数据丢失了..........
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也可以啊