大家讨论讨论结果:

polytech 2006-01-13 06:07:47
有一个宏定义:#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')

大家讨论讨论结果: DIB_HEADER_MARKER到底是"MB"还是“BM”,怎么通过编程查看字符串内容?
...全文
133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CMyMfc 2006-01-14
  • 打赏
  • 举报
回复
结果是BM

'M'<<8 // 'M'为00000000 01001101,左移8位得01001101 00000000
'M'<<8 | 'B' // 'B'为00000000 01000010,或运算后得01001101 01000010

因此字节为‘B'. 高字节为‘M’

字符串存储中低字节为首字符,依次类推, 因此得BM
iamcaicainiao 2006-01-14
  • 打赏
  • 举报
回复
上面说错了。char*类型得错误不是这。
iamcaicainiao 2006-01-14
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <WINDOWS.H>

#define DIB_HEADER_MARKER ( (char )('M' << 8) | 'B')

void main(int argc, char* argv[])
{

cout<<(char ) ('M')<<"\n";//77
cout<<(char ) ('B')<<"\n";//66
cout<<(char ) ('M' << 8)<<"\n";//19712
cout<<DIB_HEADER_MARKER<<"\n";//19718

}
最终,m还是溢出。DIB_HEADER_MARKER就是66
iamcaicainiao 2006-01-14
  • 打赏
  • 举报
回复
如果是char*得话,似乎看上去是MB,但是事实上,这个程序就错了。
M左移8位,char*类型得,早就溢出了。
polytech 2006-01-13
  • 打赏
  • 举报
回复
如果是转换成字符型一起输出的话是MB,还是BM呢?
polytech 2006-01-13
  • 打赏
  • 举报
回复
好像是19778,但如果DIB_HEADER_MARKER的类型是CHAR* 而不是WORD,是MB,还是BM呢?
iamcaicainiao 2006-01-13
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <WINDOWS.H>
#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')

void main(int argc, char* argv[])
{

cout<<(WORD) ('M')<<"\n"; //77
cout<<(WORD) ('B')<<"\n"; //66
cout<<(WORD) ('M' << 8)<<"\n"; //19712
cout<<DIB_HEADER_MARKER<<"\n"; //19718

}

M的ascii码是77,二进制码是0000 0000 0100 1101
M左移8位变成0100 1101 0000 0000,也就是10进制的19712
B的ascii码是66,二进制码是0000 0000 0100 0010

M左移8位之后,再和B进行|运算,得到的结果就是0100 1101 0100 0010,也就是10进制的19718
最终结果不是MB,也不是BM,是19718
sankt 2006-01-13
  • 打赏
  • 举报
回复
有一个宏定义:#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')

大家讨论讨论结果: DIB_HEADER_MARKER到底是"MB"还是“BM”,怎么通过编程查看字符串内容?
//=========
是:MB
M的ascii码是78,左移8位,加上B,然后就是MB

我啃 2006-01-13
  • 打赏
  • 举报
回复
DIB_HEADER_MARKER是用于产生DIB文件头的宏
 DIB_HEADER_MARKER到底是"MB"还是“BM”,怎么通过编程查看字符串内容?
不懂??

64,647

社区成员

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

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