定义了一个char buf[2];
然后有一个int nTmp = 123;要求是buf[0] 为高2位的十六进制码,
buf[1] 为低2位的十六进制码。比如:nTmp=123时,buf[0] = 0x01, buf[1] = 0x23;
nTmp=22时, buf[0] = 0x00, buf[1] = 0x22;
nTmp=5678时,buf[0] = 0x56, buf[1] = 0x78;这样代码怎么写?
不是很熟,时间比较急,还请各位朋友帮助。谢谢。
然后有一个int nTmp = 123;要求是buf[0] 为高2位的十六进制码,
buf[1] 为低2位的十六进制码。比如:nTmp=123时,buf[0] = 0x01, buf[1] = 0x23;
nTmp=22时, buf[0] = 0x00, buf[1] = 0x22;
nTmp=5678时,buf[0] = 0x56, buf[1] = 0x78;这样代码怎么写?
不是很熟,时间比较急,还请各位朋友帮助。谢谢。
解决方案 »
- COM组件中函数的调用
- 关于C++中Virtual虚函数的问题
- 急!!
- 我没有学过模板,我实在想快点解决问题,时间很紧,请帮帮忙!C++模板类问题!
- 这是什么错误啊?
- 如何设计一个按钮的焦点
- yeah,起步!我的第一个Client/Server,发文以示纪念!!散分
- 500分!急:MFC写的OCX控件在VB中处理事件时出错!!!!!!!!!
- TreeCtrl里面的SetItemData通常只能设置DWORD,我想设置字符串,怎么弄?有无其他方法?
- 我想在客户机程序中直接访问数据库服务器中的数据,该怎么做呢?
- 一个物资运输问题
- CFormView的单文档再内嵌一个对话框向CFormView发消息,CFormView取不到消息
int a=0x1234;
buf[0]=HIBYTE(a);
buf[1]=LOBYET(a);
是的,这宏可用。
但是我的nTmp是个int值,而不是十六进制的0x1234。
那么,有没有办法将int的1234转换成十六进制的0x1234,也就是int值前面加上0x,而不是将1234转换成1234的十六进制。
没办法,这是个串口通讯,厂家要求这样。
对mfc的函数了解的不多,还请各位指点。
buf[1] = (char)(a);
sprintf(buf, "0x%d", a);
int nTmp = 123;
sprintf(buf,"%02x%02x",(int)nTmp/100,nTmp%100);
int nTmp = 123;
sprintf(buf,"0x%02x0x%02x",(int)nTmp/100,nTmp%100);
{
BCDByte(){}
BCDByte(unsigned int val){operator=(val);} BCDByte & operator=(unsigned int val)
{
if(val > 99)
throw exception("BCDByte::operator=, val too large! val:" + val);
highbits = val / 10;
lowbits = val % 10;
return *this;
}
operator unsigned int() const {return highbits * 10 + lowbits;}
operator unsigned char() const {return highbits * 10 + lowbits;}
bool Check(){return highbits < 10 && lowbits < 10;}
private:
u_int8_t lowbits:4;
u_int8_t highbits:4;
};int main()
{
BCDByte bytes[2];
int nTmp = 123;
bytes[0] = nTmp/100;
bytes[1] = nTmp%100;
//自己去看内存或者打印吧
}
既然16位最多4位,你十进制数最大就是9999,只要把int分解成4个数,然后再拼装起来即可void parse(int i, char* buffer)
{
int a = i%10;
i = i/10;
int b = i%10;
i = i/10;
int c= i%10;
int d = i/10;
buffer[0] = d*16+c;
buffer[1] = b*16+a;
}
sprintf(buff,"%02d%02d",(int)nTmp/100,nTmp%100);