• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > API编写的串口,收到的16进制如何显示成文本?

API编写的串口,收到的16进制如何显示成文本?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了api串口通信,vc 串口api,api串口,windows api 串口,api串口编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: API编写的串口,收到的16进制如何显示成文本?
描述:

最近用API函数编写了串口通信程序
handlePort_ = CreateFile(portName,  
    GENERIC_READ | GENERIC_WRITE,       
    0,                                  
    NULL,                               
    OPEN_EXISTING,                       
    0,                                  
    NULL);   
ReadFile(handlePort_,  
    inputData,               
    sizeBuffer,              
    &length,                
    NULL) == 0) 
SerialThread::Run()
{
        char mess[MAX_MESSAGE];
        unsigned int lenBuff = MAX_MESSAGE;
        unsigned long lenMessage,len,k;
        static CString outPut,strtemp;
        if (SCC::serialCtl().read_scc(mess,lenBuff,lenMessage) == TRUE)
        {
          if (lenMessage > 0)
          {
            outPut = outPut + mess;
            ptrDlg->SetDlgItemText(IDC_MONITOR_REC,mess);
CFile   m_file; 
m_file.Open("data.txt",CFile::modeCreate |CFile::modeWrite |CFile::typeBinary); 
m_file.Write(outPut,outPut.GetLength());   
m_file.Close(); 
m_file.Flush(); */ 
}
这样的话我存成的文件是字符,用二进制模式打开可以看到数据是正确的
可是现在想直接看到数据,本来以为可以把mess直接转换成字符,例如从串口收到0x14,则转换成"14"
可是mess[100]没有办法变成16进制数型,这个0x14在哪里啊,应该怎么处理,数据都在这里了,可就是显示不出来很郁闷


解决方案1:

晕了。
mess相当于一指针&mess[0],你3楼说错误,是不是你用mess[x]啦?
value是一个值,是从串口接收到的,sprintf把其用%x的形式格式化到buf中去,那么你printf("%s",mess)时(或MessageBox(mess)或xxxfun(mess)时),显示的就是要求的16进制,更多的形式变化可看4楼代码相应位置。

解决方案2:


CHAR  * MemToHex(void * pMem, int nSize, CHAR * pBuffer, DWORD dwAddress)
{
    BYTE * pDat;
    char buf[1024];
    char buf1[1024],buf2[1024];
    int i;
    int a,b,p;
    pDat = (BYTE *)pMem;
    a = nSize/16;
    b = nSize%16;
    pBuffer[0] = 0;
    for(i=0; i<a; i++)
    {
        p = i*16;
        memcpy(buf, pDat+p, 16);
        buf[16]=0;
MemReplaceVal(buf, 16, (BYTE) 0, ' ');
MemReplaceVal(buf, 16, (BYTE) 9, ' ');
MemReplaceVal(buf, 16, (BYTE)10, ' ');
MemReplaceVal(buf, 16, (BYTE)12, ' ');
MemReplaceVal(buf, 16, (BYTE)13, ' ');
MemReplaceVal(buf, 16, (BYTE) 0, ' ');
        sprintf(buf2, "%08X: %02X %02X %02X %02X %02X %02X %02X %02X-%02X %02X %02X %02X %02X %02X %02X %02X   %s\r\n",
            dwAddress,
            pDat[p+0],pDat[p+1],pDat[p+2],pDat[p+3],pDat[p+4],pDat[p+5],pDat[p+6],pDat[p+7],
            pDat[p+8],pDat[p+9],pDat[p+10],pDat[p+11],pDat[p+12],pDat[p+13],pDat[p+14],pDat[p+15],buf);
        dwAddress += 0x10;
        strcat(pBuffer, buf2);
    }
if(b == 0) return pBuffer;
    sprintf(buf2, "%08X: ", dwAddress);
    for(i=0;i<b;i++)
    {
        p=a*16+i;
        if(i == 7) sprintf(buf1, "%02X-", pDat[p]);
        else sprintf(buf1, "%02X ", pDat[p]);
        strcat(buf2, buf1);
    }
    sprintf(buf1, "%*s", 50-b*3, " ");
    strcat(buf2, buf1);
    memcpy(buf, pDat+a*16, b);
    buf[b]=0;
MemReplaceVal(buf, b ,(BYTE) 0, ' ');
MemReplaceVal(buf, b ,(BYTE) 9, ' ');
MemReplaceVal(buf, b ,(BYTE)10, ' ');
MemReplaceVal(buf, b ,(BYTE)12, ' ');
MemReplaceVal(buf, b ,(BYTE)13, ' ');
    strcat(pBuffer, buf2);
    strcat(pBuffer, buf);
    return pBuffer;
}
DWORD MemReplaceVal(void * Mem, DWORD dwMemSize, BYTE oldval,BYTE newval)
{
BYTE * pByte;
pByte = (BYTE *)Mem;
for(DWORD i=0;i<dwMemSize;i++)
{
if(pByte[i] == oldval)
pByte[i] = newval;
}
return dwMemSize;
}

解决方案3:

转换一下:

static char *hex2str(char *obuf, const char *buf, int len)
{
#define BIN2HEX(x) ((x) < 10 ?&nb
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • API串口通信碰到的怪问题
  • api串口通信分段接收问题
  • 关于VC2008API串口通信
  • 用串口API函数,为什么运行后出现0X00000000内存无法引用不能read
  • 我在编写API串口时,出现zmouseh和mbstringh系统文件打不开?
  • API编写的串口,收到的16进制如何显示成文本?
  • 在VC下用API编写串口通讯的程序

相关文章

  • 2017-06-05 WEB页面用JS调用ActiveX后如何销毁并释放内存
  • 2017-06-05 VS2008ATL建立服务的问题
  • 2017-06-05 紧急求助:不值多线程如何实现?我现在有两个函数,需要他们同时执行:一个是计时器,一个是采数据的函数。(即等答复!!)
  • 2017-06-04 WSAECONNRESET错误
  • 2017-06-04 如何创建象MapX那样的有多个导出类的ActiveX控件
  • 2017-06-04 MircrosoftForms20Label的使用问题,在线等
  • 2017-06-05 如何通过Memory-MappedFiles在多个进程之间共享内存?
  • 2017-06-04 我在VC中調用了RealAudio但退出時出錯不知為什麼
  • 2017-06-04 一个开发数据库和ASP接口的问题(很急)!!!
  • 2017-06-04 完全基于opencv的双目景深与测距的实现

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请教微软专家:ATL项目中用CreateThread好,还是_beginthreadex好?
    • 关于VC++中的自定义消息
    • 请问如何在DLL中创建WebControl控件?
    • 怎样检测ActiveX控件正在使用?
    • 文档类和自定义线程的通信问题,请帮忙!
    • 请问有谁有《win32多线程程序设计》的cd-rom的源代码?
    • ActiveX控件中一个接口返回一个结构类型其中一个元素是BSTR在C#中实例化该结构没有问题但在vb中出现类型不能自动化的问题
    • 请教一个dll的出错问题,谢谢!
    • [散分贴]弱弱问一句,alt项目如果用exe方式的话,怎么注册
    • com的接口函数只能返回HRESULT类型,我想得到一个字符串,怎么办呢?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有