TEdit的一个问题

「已注销」 2012-08-29 12:20:36
想把TEdit上的文本以16进制格式读入buffer,比如

ffff->\xff\xff

可当文本长度为32时,最后一个数总是读不进去

ffffffffffffffffffffffffffffffff->\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00

试过其它长度可以正常读取,,就是32的时候最后2字节总为00,该怎么解决呢
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2012-08-29
  • 打赏
  • 举报
回复
你的代码效率太低,看我的:
int __stdcall CrnHexToByte(LPCSTR lpInBuf, LPBYTE lpOutBuf)
{
size_t uInLen;
uInLen = strlen(lpInBuf);

int nResult = 0;
if (uInLen < 2) return nResult;

BYTE c;
for (size_t i = 0; i < uInLen; i += 2)
{
// 输出高4位
c = lpInBuf[i];
if (c >= '0' && c <= '9') lpOutBuf[nResult] = (c - '0') << 4;
else if (c >= 'A' && c <= 'F') lpOutBuf[nResult] = (c - 'A' + 10) << 4;

// 输出低4位
c = lpInBuf[i + 1];
if (c >= '0' && c <= '9') lpOutBuf[nResult++] |= (c - '0');
else if (c >= 'A' && c <= 'F') lpOutBuf[nResult++] |= (c - 'A' + 10);
}

return nResult;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
BYTE buff[4096];
int n = CrnHexToByte(S1->Text.c_str(), buff);

Caption = n;
}
「已注销」 2012-08-29
  • 打赏
  • 举报
回复
错了。是长度为30的时候不能读取

void __fastcall TForm1::Button4Click(TObject *Sender)
{
BYTE buff[4096];
char *p;int i;
for(i=0,p=S1->Text.c_str();i<S1->Text.Length()/2;i++,p+=2)
sscanf(p,"%02x",buff+i);
}
ccrun.com 2012-08-29
  • 打赏
  • 举报
回复
闲话少说,赶紧上代码。
「已注销」 2012-08-29
  • 打赏
  • 举报
回复
用这个函数果然就可以了,十分感谢!!

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧