请问如何将LPBYTE转换成char
谢谢了
谢谢了
解决方案 »
- 在VS2010中如何自动增减软件版本号?
- 上海有什么好的网络信息安全认证培训啊?请各位推荐下
- 远程初始化问题
- ——*-为什么运行::FindWindow内存会出错?代码很简单的-*——
- 发送消息问题
- 请问如何实现像access里面那种样子的表格?
- 100分,可否提供 Windows 95 System Programming SECRETs 和 Windows 95 系统程式设计 - VMs 与 VxDs 两本书的英文版下载地址?
- 大家来讨论一下,微软用什么来开发软件的??
- 自己编的MFC程序运行正常(自己添加并使用了MSCHART控件),想在别人的电脑上运行,但在别人电脑上无法运行(已添加MFC静态库)
- 在cdoc里怎么将获得cmainframe的指针?在线等
- 关于simplegraph?
- 请求推荐vc++入门的好书,适合初学者
typedef unsigned char BYTE;
typedef BYTE far *LPBYTE;
如果没有特别需求的话,直接转就好了。
LPBYTE pByte;
char cC = *pByte;
LPBYTE pByte=&b;
char* pb=reinterpret_cast<char*>(pByte);
LPBYTE pByte;
char ch = *pByte;
char *buf = (char *)lpBuffer;
MessageBox(NULL, buf, "Info", MB_OK);这样可以转换就是后面有乱码
请问怎么回事
楼主,你给lpbuffer指向的内容是什么?如果是一串以'\0'结束的字符串,就没有问题,如果根本不是字符,而是数字或者该字符串不是以'\0'来标识结尾的,就不能这么用,而是要取得字符串长度再strcpy_s(..)得到指定长度的内容。因为非字符的显示会是乱码,或者由于你没有'\0'中止符,多取得的未知内存中的内容也是乱码的,这个很正常。建议楼主在给BYTE类型的地址赋值后,在接着的后一个元素上设置'\0',或者使用memset(...)为初始化这个BYTE类型的地址块。这样默认情况下,其每一位都会是'\0',有用的内容写入后,前面的就变成了实际的内容,后面的还是'\0',就不会造成乱码的情况了。
从LPBYTE里得到的东西,一般都是这样处理的,不对接收缓冲直接操作
char buf[某个长度];
memcpy(buf,lpBuffer,sizeof(你定义的长度或者是通讯报文里的字串长));
buf[你定义的长度或者是通讯报文里的字串长] = '\0';
以下是写入程序//把文本写入文件的资源里去FileName1 文件名
str 文本BOOL CDisposionServer::AddRessName(LPCTSTR FileName1, CString str)
{
LPBYTE lpBuffer=0; HANDLE hResource;
hResource = BeginUpdateResource(FileName1, FALSE);//给文件里面写内容
if (NULL != hResource)
{
lpBuffer = (LPBYTE)(LPCSTR)str;//把CString转换成LPBYTE类型
int nLength = str.GetLength();//的到str的大小
if (UpdateResource(hResource,
RT_RCDATA,
MAKEINTRESOURCE(129), //把文本写到资源的129里面
MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),
(LPVOID)lpBuffer,
nLength) != FALSE)
{
EndUpdateResource(hResource, FALSE);
}
else return 0;
}
else return 0;
return 1;
}以下是读文本的程序BOOL ReadJpgInfo()
{
//得到自身路径
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义为 128
GetModuleFileName(NULL,exeFullPath,MAX_PATH); HMODULE hLibrary;
HRSRC hResource;
HGLOBAL hResourceLoaded;
LPBYTE lpBuffer;
hLibrary = LoadLibrary(exeFullPath);
if (NULL != hLibrary)
{
hResource = FindResource(hLibrary, MAKEINTRESOURCE(129), RT_RCDATA);
if (NULL != hResource)
{
hResourceLoaded = LoadResource(hLibrary, hResource);
if (NULL != hResourceLoaded)
{
lpBuffer = (LPBYTE)LockResource(hResourceLoaded);
if (NULL != lpBuffer)
{
DWORD dwFileSize;
dwFileSize = SizeofResource(hLibrary, hResource);
char* buf=reinterpret_cast <char*>(lpBuffer); MessageBox(NULL, buf, "Info", MB_OK);//buf里面的字符后面有乱码
}
}
}
else
{
FreeLibrary(hLibrary);
return 0;
}
}
return 1;
}