请教各位,有关C++数据类型转换的问题

zhxingway 2011-01-10 04:35:09
您好,感谢你阅读此帖.

有一个数,它用一个字节表示,要把它的高4位和低4位分别提取出来合成一个数
比如:00011000,提取高4位表示1,低4位表示8,那么最后的结果要表示成 81

请教各位转换的代码,谢谢.
在线等答案...
...全文
99 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marcous 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhxingway 的回复:]
忘了说明,我知道怎么把它的高4位和低4位提取出来,只是不知道怎样再把它们合成一个数.

byte i=0x18;
int h4bit = i&0x0f;(00001000)
int l4bit = (i&0xf0)>>4;(00000001)
...
//怎样把最后的结果表示成81?
[/Quote]

int h4bit=h4bit<<4;(10000000)
int result=h4bit|l4bit;(10000001)
结果:
result=0x81;
给分吧。。。
we_sky2008 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 we_sky2008 的回复:]
引用 15 楼 zhxingway 的回复:
引用 11 楼 we_sky2008 的回复:
引用 3 楼 we_sky2008 的回复:
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));

因为byte的类型是unsigned char, 所以不需要&amp;amp;操作了
直接移位就可以了
……
[/Quote]

unsigned char i = 0x18;
unsigned char result = ((i & 0xf) * 10 + (i >> 4));//如果是10进制的81


貌似0x18转换为10进制的81没什么意义吧?
那么0xab转换为10进制应该多少呢?

we_sky2008 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhxingway 的回复:]
引用 11 楼 we_sky2008 的回复:
引用 3 楼 we_sky2008 的回复:
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));

因为byte的类型是unsigned char, 所以不需要&amp;操作了
直接移位就可以了


这个结果不是81呀
[/Quote]
81还是0x81 ?
十进制还是16进制?
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bdmh 的回复:]
高四位×10的低四位位数的乘方+低四位数
也可以转成字符拼起来
[/Quote]

其实正确结果是这个
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 we_sky2008 的回复:]
引用 3 楼 we_sky2008 的回复:
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));

因为byte的类型是unsigned char, 所以不需要&操作了
直接移位就可以了
[/Quote]

这个结果不是81呀
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
谢谢we_sky2008,各位很热心啊,谢谢各位
我想问题已经解决了.
zhangsongcui 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 we_sky2008 的回复:]

引用 3 楼 we_sky2008 的回复:
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));

或者使用位域:
C/C++ code

#include<stdio.h>
#include<stdlib.h>

unsigned char func(unsigned char val)
{
u……
[/Quote]
8L先我一步呃
zhangsongcui 2011-01-10
  • 打赏
  • 举报
回复
共用体行么?
union Num {
struct A {
int n1:4;
int n2:4;
} a;
char b;
};

int main(int argc, char** argv) {
Num n;
n.b=64;
cout << n.a.n1 << endl << n.a.n2 << endl;
return 0;
}
we_sky2008 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 we_sky2008 的回复:]
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));
[/Quote]
因为byte的类型是unsigned char, 所以不需要&操作了
直接移位就可以了
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hai040 的回复:]
...
错了,当成8进制了
12 12的话是想表示成什么?
[/Quote]
12的话,二进制表示是00001010,
所以我希望它的最后结果是10100000表示一个数,结果是160
bdmh 2011-01-10
  • 打赏
  • 举报
回复
高四位×10的低四位位数的乘方+低四位数
也可以转成字符拼起来
we_sky2008 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 we_sky2008 的回复:]
C/C++ code

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));
[/Quote]
或者使用位域:

#include<stdio.h>
#include<stdlib.h>

unsigned char func(unsigned char val)
{
union my_union
{
unsigned char uch;
struct
{
unsigned char low : 4;
unsigned char hig : 4;
};
} ;
union my_union mu = {val};
return ((mu.low << 4) | mu.hig);
}

int main()
{
unsigned char i = 0x81;
printf("%x\n", func(i));

system("pause");
return 0;
}
bluesky12312388 2011-01-10
  • 打赏
  • 举报
回复
byte i=0x18;
int h4bit = i&0x0f;
int l4bit = (i&0xf0)>>4;

int result = l4bit || h4bit>>4;

这就是LZ要的结果?
zhanshen2891 2011-01-10
  • 打赏
  • 举报
回复
byte i=0x18

(i & 0xf0) << 4 + (i & 0x0f)
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
不好意思,我刚才试了一下,发现这样可以得到结果,由于是使用MFC,所以可以使用CString
如果大家用纯C++语言也可以.

byte i =0x18;
int h4bit = i&0x0f;
int l4bit = (i&0xf0)>>4;

CString sTemp;
sTemp.Format("%d%d",h4bit,l4bit);
int result = atoi(sTemp);
sTemp.Format("%d",result);
MessageBox(sTemp);
//result = 81
hai040 2011-01-10
  • 打赏
  • 举报
回复
...
错了,当成8进制了
12 12的话是想表示成什么?
we_sky2008 2011-01-10
  • 打赏
  • 举报
回复

byte i = 0x18;
byte result = ((i >> 4) | (i << 4));
hai040 2011-01-10
  • 打赏
  • 举报
回复
h*10+l
zhxingway 2011-01-10
  • 打赏
  • 举报
回复
忘了说明,我知道怎么把它的高4位和低4位提取出来,只是不知道怎样再把它们合成一个数.

byte i=0x18;
int h4bit = i&0x0f;
int l4bit = (i&0xf0)>>4;
...
//怎样把最后的结果表示成81?

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧