BYTE data[2],请问我怎么把9999赋给他呢???知道怎么写,不懂BYTE 类型用法,大家帮忙,谢谢!
解决方案 »
- 请问如何将MFC picture控件里的图片 存到sqlite数据库里?
- 求基于visual stdio平台下的visual c++教程
- 怎么 去掉 IE 右侧 的滚动条
- 怎么在程序中修改静态文本框的文字,另外怎么设置字体及颜色?
- 高分求 com原理与应用 电子书, 注意不是附书源码
- 请教高手: 向RichEdit控件发送SET_TEXT消息往里写内容的问题!有的能写进去内容,有的却写不进去?
- 关于于内存泄漏的问题:在什么情况下会发生内存泄漏,(CButton*)getdlgitem()会吗?
- 多个位图的效率问题
- 请高手解答关于NetMessageBufferSend函数问题
- 如何画光标???
- 在vc++.net中提供CSMTPConnection类,支持多国语mail送信,但在vc++6。0下没有!请问如果我在vc++.net下,用那个类做个dll,在vc6。0下能
- 升级最新的sdk后,怎么在vc6.0中调用
类型用short或WORD即可
int类型四个字节
你的BYTE数组只有两个字节,可以这么做:
*((WORD *)data) = 9999;
data[1] = 0x99;
data[0] = 0x99;
data[1] = 0x99;
你这样不对吧。
9999(10) ==> 270F (16进制)
照你的写,该是
data[0] = 0x0f
data[1] = 0x27
这样吧
*((unsigned short *)data) = 9999;又因为9999小于32767,所以*((short *)data) = 9999;也可以,但是第一种是完全等价的,第二种严格来说是错误的
// 转换2字节16进制的字符串到ASCII字符串
BOOL HextoAscii(char* sHex,char* sReply)
{
int iLen,i,j=0;
BYTE * lsData;
BYTE * lsReply; if(sHex==NULL)
{
return FALSE;
}
iLen=strlen(sHex);
if((iLen%2!=0)||(iLen>1024))
{
return FALSE;
}
if(sReply==NULL)
{
return FALSE;
} iLen=strlen(sHex);
lsData=new BYTE[iLen];
lsReply=new BYTE[iLen/2+1];
memcpy(lsData,sHex,iLen);
for(i=0;i<iLen;i+=2)
{
if(((lsData[i]>='0'&&lsData[i]<='9')||
(lsData[i]>='a'&&lsData[i]<='f')||
(lsData[i]>='A'&&lsData[i]<='F'))&&
((lsData[i+1]>='0'&&lsData[i+1]<='9')||
(lsData[i+1]>='a'&&lsData[i+1]<='f')||
(lsData[i+1]>='A'&&lsData[i+1]<='F'))
)
{
if(lsData[i]>='0'&&lsData[i]<='9')
lsReply[j] = lsData[i]-'0';
if(lsData[i]>='a'&&lsData[i]<='f')
lsReply[j] = lsData[i]-'a'+10;
if(lsData[i]>='A'&&lsData[i]<='F')
lsReply[j] = lsData[i]-'A'+10;
lsReply[j]=(lsReply[j]<<4)&0xf0;
if(lsData[i+1]>='0'&&lsData[i+1]<='9')
lsReply[j] |= lsData[i+1]-'0';
if(lsData[i+1]>='a'&&lsData[i+1]<='f')
lsReply[j] |= lsData[i+1]-'a'+10;
if(lsData[i+1]>='A'&&lsData[i+1]<='F')
lsReply[j] |= lsData[i+1]-'A'+10;
j++;
}
else
break;
}
lsReply[j]=0x00;
memcpy(sReply,lsReply,j+1);
delete lsReply;
delete lsData;
return TRUE;
}// 转换ASCII字符串到2字节16进制的字符串
BOOL AsciitoHex(char* sAsc,int iLength,char* sReply)
{
int i,j=0;
BYTE ch1,ch2;
BYTE * lsData;
BYTE * lsReply; if(sAsc==NULL)
{
return FALSE;
}
if(iLength>512)
{
return FALSE;
}
if(sReply==NULL)
{
return FALSE;
} lsData=new BYTE[iLength];
lsReply=new BYTE[iLength*2+1];
memcpy(lsData,sAsc,iLength);
for(i=0;i<iLength;i++)
{
ch1=lsData[i]>>4; //高四位
ch2=lsData[i]&0x0f; //低四位
lsReply[j++]=(ch1>=0&&ch1<=9)?(ch1+0x30):(ch1+0x37);
lsReply[j++]=(ch2>=0&&ch2<=9)?(ch2+0x30):(ch2+0x37);
}
lsReply[j]=0x00;
memcpy(sReply,lsReply,j+1);
delete lsReply;
delete lsData;
return TRUE;
}
BYTE data[2];
char str[5];
int i = 9999;memset(data, 0, 2);
memset(str, 0, 5);
sprintf(str, "%d", i);AsciitoHex(data, strlen(str), (char *)data);虽然较比的麻烦,但应该是楼主想要的答案
如果不考虑数据丢失,操作如下:
int i;
*((short*)data) = i;
因为int 类型有符号,所以上面可以用两个字节有符号类型,short int和signed short int与short 等价,当然,你也可以用__int16;
总之,要注意两件事情,1,是否有数据截断;2,是否需要符号(-)
BYTE b[2];
b[0] = i % (0xff+1);
b[1] = i / (0xff+1);