C++ byte赋值的问题

我在C++定义了byte变量比如a,我知道byte是unsignedchar类型,比如我赋值a=0xAA,如果我一个字符串(AB)想赋值个a,直接写等号吗,怎么弄?初学者... 我在C++定义了byte变量比如a,我知道byte是unsigned char类型,比如我赋值a=0xAA,如果我一个字符串(AB)想赋值个a,直接写等号吗,怎么弄?初学者,对类型不太明白,望赐教,谢谢 展开
 我来答
pengguismile
2013-12-10 · TA获得超过687个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:126万
展开全部

我知道你的意思了,请使用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,就要你自己分析字符串了,在根据字符串来赋值,直接等于是不行的。类型都不一样。
更多追问追答
追问
我就是一个10进制的数,我把转换成16进制了,字符串表示的,然后想赋给BYTE类型的变量,有什么办法吗
追答
我的办法就是.net的办法啊。
自己写函数的话就要分析这个字符串了,麻烦得很。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1527374789
2013-12-10 · TA获得超过171个赞
知道答主
回答量:52
采纳率:0%
帮助的人:27.1万
展开全部
这个无法赋值。字符串是字符集合,一个字符占一个字节(8位也有宽字符两个字节,不做考虑)
所以你要保存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,然后根据权值做累加。
}
最后,这是一个很蛋疼的需求。!!一定是你哪里理解错了才会这么想。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式