char数组转成dword
请教下有没有直接转化的方法,我的dword会很大,肯定是超过了int的所以强制转化(DWORD)肯定是不行的。像dword转成char可以直接调用_ultoa(),请问下...
请教下有没有直接转化的方法,我的dword会很大,肯定是超过了int的所以强制转化(DWORD)肯定是不行的。
像dword转成char可以直接调用_ultoa(),请问下反过来转化是不是也可以直接调用某个函数方法,atoi()转成int在强制转化不行。 展开
像dword转成char可以直接调用_ultoa(),请问下反过来转化是不是也可以直接调用某个函数方法,atoi()转成int在强制转化不行。 展开
2个回答
展开全部
一般来说,直接移位拼装即可。但是我理解,按照你的描述,貌似你的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;
大概就是这样的。除此之外,还需要考虑尾序的问题。
对于更高位数的操作,基本原理是一样的。
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然后再加呢?或者直接存成dword。。目前dword、int还有long应该都占4个字节,不同的是dword是unsiged的long
追问
是的,我是要直接转成dword不是说要通过int在转成dword,1楼的可能没理解我说的,我的意思就是说我要把char中存的字符串转成dword,但是char中的字符串远大于int类型的最大值,如果直接atoi()来转化的话会被截断,所以想问下是不是有方法可以直接转成dword类型,而不是调用atoi()来先转成int
追答
char中的字符串是由若干char型变量构成的,如果你想把字符串整体变成一个dword是不可能的,因为dword没有那么长;如果你依次把字符串中的每一个char变成dword倒是可以,就是说,你最后变成的是一个dword数组。
如果想把char数组变成dword数组,只需用for语句挨个转换即可。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询