1 Star 0 Fork 7

沐风/SerialTool

forked from jiangxiaogang/SerialTool 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
convert.c 1.48 KB
一键复制 编辑 原始数据 按行查看 历史
jiangxiaogang 提交于 2022-03-08 18:29 . 修复GBK问题
#include "stdafx.h"
#include "convert.h"
//十六进制转数据,返回数据长度
//示意:"12 34" -> 0x12 0x34
DWORD HEXToBIN(CHAR* pHEX, BYTE* pBIN)
{
DWORD dwLen;
CHAR ch;
BYTE biFlag;
BYTE biHalfByte;
biFlag = 0;
biHalfByte = 0;
for(dwLen=0;ch=*pHEX;pHEX++)
{
if ((ch>='0')&&(ch<='9'))
{
biHalfByte = ch - '0';
}
else if((ch>='A')&&(ch<='F'))
{
biHalfByte = ch - 'A' + 10;
}
else if((ch>='a')&&(ch<='f'))
{
biHalfByte = ch - 'a' + 10;
}
else
{
continue;
}
if(biFlag==0)
{
*pBIN = biHalfByte<<4;
}
else
{
*pBIN |= biHalfByte;
pBIN++;
dwLen++;
}
biFlag = !biFlag;
}
return dwLen;
}
//二进制转换为十六进制
//示意:0x12 0x34 -> "12 34"
static CONST CHAR chCode[]={"0123456789ABCDEF"};
void BINToHEX(CHAR* pzHEX, BYTE* pBIN, DWORD dwLen)
{
DWORD i;
for(i=0; i<dwLen; i++)
{
*pzHEX++ = chCode[(*pBIN>>4)&0x0F];
*pzHEX++ = chCode[(*pBIN)&0x0F];
*pzHEX++ = ' ';
pBIN++;
}
*pzHEX = 0;
}
//解决半个汉字的问题
void BINToGBK(CHAR* pzGBK, BYTE* pBIN, DWORD dwLen)
{
static BOOL bHalf;
static CHAR cLast;
DWORD i;
if(bHalf)
{
*pzGBK++ = cLast;
bHalf = FALSE;
}
for(i=0;i<dwLen;i++)
{
if(bHalf)
{
bHalf = FALSE;
}
else if(*pBIN > 0x80)
{
bHalf = TRUE;
}
if((*pBIN == '\n') && (cLast != '\r'))
{
*pzGBK++ = '\r';
}
cLast = *pBIN;
*pzGBK++ = *pBIN++;
}
if(bHalf)
{
pzGBK--;
}
*pzGBK = 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/cody_liu/SerialTool.git
git@gitee.com:cody_liu/SerialTool.git
cody_liu
SerialTool
SerialTool
master

搜索帮助