一般来说,直接移位拼装即可。但是我理解,按照你的描述,貌似你的DWORD长度超过了cpu的寄存器的长度。如果是后者的话,不妨这样做:
struct _dword{
word lo; // 假设cpu寄存器长度16位,word长度16位
word hi;
};
struct _dword a;
char b[4] = {0x12, 0x34, 0x56, 0x78};
a.lo = b[0] & 0x00FF + (b[1] & 0x00FF) << 8; // “与”操作将字符转为16位word,移位拼装。
a.hi = b[2] & 0x00FF + (b[3] & 0x00FF) << 8;
大概就是这样的。除此之外,还需要考虑尾序的问题。
对于更高位数的操作,基本原理是一样的。更多
我的意思是说:
假如int类型最大只能是1~100的数字,但是我现在的数字绝对是超过100了的,比如我是101,因此我如果先把101赋值给了int类型再用强制转换成(DWORD),则必然得到的值不会是101
所以想说有没有直接转化的函数,像是_ultoa()这样的直接把DWROD转化成char数组
如果你的立即数超出了你的基本数据类型的表达范围,不可能有直接转换的函数。
而且一旦立即数超出最长整形的表达范围,编译的时候会提示,并且会按字长进行截断。
比如我在程序中定义一个int数
int i=123456789123456789123456789;
那么在编译的时候会出现如下提示
moose@fuloong:~/code$ gcc test.c
test.c:16:9: warning: integer constant is too large for its type [enabled by default]
test.c:16:9: warning: overflow in implicit constant conversion [-Woverflow]
运行时显示:
2080661270
对的,我知道会被截断,我的意思就是说怎么才能直接转化成dword,而不先经过int在转成dword
没有方法,你用1L的瓶子运2L的水,只能两次搬运不是嘛?
你的开发环境里,word和dword都多长?
c++ 中char 数组 转成 DWORD
你用MAKEWORD(高,低)吧,最简单了,拆分用LOWORD和HIWORD,就行了
vc 如何char数组转换DWORD
问题多多
1. 数组大小为10,你搞了11个元素来初始化
2. 0x96超出了char的表示范围
3. &buff ,buf拼写错误, 不该取地址 即buf+4
buf取地址后+4是按数组长度加的4,而 buf+4是按int长度加的4
mfc中ip adrress control中的dword值转化为char *
DWORDaddress;control.GetAddress(address);
charip[16];
sprintf(ip,"%d.%d.%d.%d",address>>24,(address>>16)&0xFF,(address>>8)&0xFF,address&0xFF);
字符串和DWORD类型之间如何相互转换
再把 dword转为字符串的也发出来
void HashToString(char *strHash,SHA1 hash,int iSize) //hash转成字符串
{
uchar *p=(uchar *)&hash;
char tmp[3]={0};
for (int j=0;j<iSize;j++)
{
sprintf(tmp,"%02X",(uchar)p[j]);
//OutputDebugString(tmp);
strcat(strHash,tmp);
}
//OutputDebugString(strHash);
}
在VC++中将结构体转换为DWORD_PTR,该怎么从DWORD_PTR型的变量中得到结构体中每个元素的值呢?
DWORD_PTR就是DWORD,DWORD就是LONG,或ULONG。你可以这样:
student somebody;
DWORD_PTR pparam=(DWORD_PTR)&somebody;
student* pbody=(student*)pparam;
pbody->name;
分析:
这是指针的强制转化;指针可以转化为long类型的,又丛LONG强制转化为student的指针。
明白了吗?
转载请注明出处51数据库 » char*转dword char数组转成dword
阿里馬雲