如何将*unsigned char转为*unsigned Long?(用bitset时遇到的困难)

来源:百度知道 编辑:UC知道 时间:2024/05/17 14:04:39
我在初始化bitset对象时,想将一个unsigned char 直接初始化,可报错,我也知道书上是这样的:bitset<n> b(u)其中u为unsigned long型
可我不知道怎么改才对,请高手帮助看下。代码是这样的:
unsigned char *template1;
for(int i=0;i<lHeight;i++)
for(int j=0;j<lWidth;j++)
{
template1[i*lWidth+j]=atol(template1[i*lWidth+j]);
}
bitset<65536> T1(template1);谢谢指教!
这里想完成的功能主要就是将unsigned char *template1数据放到bitset里去进行位操作...
一直说放入的类型不对,不知道要怎么解决呀,或者高手们提供下别的方法完成功能...
再次磕谢!

希望您下次发出来的时候不要单独用l,我误以为是 1;
而且希望您发出来的时候,不要用带有关键字的名字,很艺术呀。

理论上,一切指针存储形式一致,都是32位的。(对于一般机器)。
1、不同的是指针对应的对象所对应的功能,比如int*和函数指针调用就不一样,而且
int *p;char *q;
p++;q++的行为也不一样,一个加32位,一个加8位。
2、还有:
float*;
int*
他们指向的对象存储形式不同,也产生了指针的不同。

如果这两点可以在一定程度上吻合,那指针转化就没什么问题。

很遗憾,我在tc2.0下记得用过强行的指针转换,但是到了比较高级的编译器,这个就被禁了。

你可以使用纺织语法来实现。
#include <new.h>
char *p;
long *q;

q=new(p) long;
这样就成功转换了,很奇怪,我的编译器将位直接对应,你看看你的是不是,不是你自己挑动数据位置(用>><<就行)。

ps:有放置语法被瑞星2008认为是病毒,无奈,你要想成功实现并连接成程序,就得关了瑞星,其实,可见,放置的危害很大,其实数据转换的危害都不小。

明白?不明白发消息文我。

最后,建议如果使用new申请的空间,你必须再次转化,以免内存泄露。

不同类型的指针是不能转化的。
一种类型的指针只能指向声明时声明的类型。

unsigned char *template1; 尚未分配数据存放单元

假定分配了单元
初始化
unsigned char template1[100];
直接用 memset:

memset ( template1, 0, 100*sizeof(unsigned char) );
参数2 用 0,则全部初始化为 0
参数2 用 1,则全部初始化为 1。。。