C++ byte赋值的问题
我在C++定义了byte变量比如a,我知道byte是unsignedchar类型,比如我赋值a=0xAA,如果我一个字符串(AB)想赋值个a,直接写等号吗,怎么弄?初学者...
我在C++定义了byte变量比如a,我知道byte是unsigned char类型,比如我赋值a=0xAA,如果我一个字符串(AB)想赋值个a,直接写等号吗,怎么弄?初学者,对类型不太明白,望赐教,谢谢
展开
3个回答
展开全部
我知道你的意思了,请使用atoi函数。满意请采纳。附部分代码:
char pszStr[100]=“23”;//字符串
unsigned char ucVar;
ucVar=(unsigned char)atoi(pszStr);//atoi转换为整形,需要强制转换为unsigned char 类型。
追问
貌似明白一些,谢谢您,还想问清楚一些
BYTE a[8];
a[0]=0xAA;
和你的值一样么
a[0]=(unsigned char)atoi("AA");
再次谢谢
追答
atoi函数是把十进制的字符串转换为整形,由于"AA"不是0~9,所以无法进行转换,结果应该是0,你可以测试一下。
另外,0xAA是无需转换。
2013-12-10
展开全部
这个.net有标准的函数来完成这个工作。
比如说,你想在文本框textBox1里面获取一个byte, 16进制。
byte a;
byte.TryParse(textBox1.Text, System.Globalization.NumberStyles.AllowHexSpecifier,
null, out a);
例如textBox1里面你输入AB,大写小写都可以,这个函数就把0xAB赋值给了a,如果你输入的不非标准的,比如GG,那就a里面的值就是0x00。
如果你不用.net,就要你自己分析字符串了,在根据字符串来赋值,直接等于是不行的。类型都不一样。
比如说,你想在文本框textBox1里面获取一个byte, 16进制。
byte a;
byte.TryParse(textBox1.Text, System.Globalization.NumberStyles.AllowHexSpecifier,
null, out a);
例如textBox1里面你输入AB,大写小写都可以,这个函数就把0xAB赋值给了a,如果你输入的不非标准的,比如GG,那就a里面的值就是0x00。
如果你不用.net,就要你自己分析字符串了,在根据字符串来赋值,直接等于是不行的。类型都不一样。
更多追问追答
追问
我就是一个10进制的数,我把转换成16进制了,字符串表示的,然后想赋给BYTE类型的变量,有什么办法吗
追答
我的办法就是.net的办法啊。
自己写函数的话就要分析这个字符串了,麻烦得很。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个无法赋值。字符串是字符集合,一个字符占一个字节(8位也有宽字符两个字节,不做考虑)
所以你要保存AB这个字符串只有使用String或者字符数组。如果你直接赋值0xAB给a那么解析出来的是另外一个字符(具体什么字符请查看ascii表)。字符串AB给你这种错觉只不过他包含在十六进制而已。如果AH这个字符串呢?0xAH就是非法了。所以类型不同没有讨论的必要
所以你要保存AB这个字符串只有使用String或者字符数组。如果你直接赋值0xAB给a那么解析出来的是另外一个字符(具体什么字符请查看ascii表)。字符串AB给你这种错觉只不过他包含在十六进制而已。如果AH这个字符串呢?0xAH就是非法了。所以类型不同没有讨论的必要
追问
那我一个16进制的数(我用字符串表示的)怎么给byte 类型呢?有什么办法吗
追答
其实你应该好好考虑一下关于类型跟存储长度的问题。在C语言中一般char 1bit,int 2 or 4 bit,long 4 bit,float,double....
之所以分这么多类型就是因为不同的类型适合储存不同的变量。你一个16进制的数(请问是多大?),一般来说对于数(整数)我们使用int型存储是合适的。比如0xaabbccdd(长度是四字节),
如果你非要给byte类型赋值。byte b = 0xab,没有问题。但是你使用字符串表示的话直接赋值不可以的,你可能需要做一个转换。依次读出每一个字符然后设值。
for(int i =0,i<string.size,i++)
{
//读出的字符0-9直接处理,a-f转化成10-15,然后根据权值做累加。
}
最后,这是一个很蛋疼的需求。!!一定是你哪里理解错了才会这么想。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |