永发信息网

在Builder6 中怎么把字符串转成十六进制的数。我在做一个串口软件,要16进制格式发送

答案:2  悬赏:80  手机版
解决时间 2021-02-14 01:25
  • 提问者网友:放下
  • 2021-02-13 12:26
我用串口控件Cport做。默认是字符数据。现在PLC要的是16进制的数据。电脑要发送16进制的数据给PLC才行。下面是我用Builder6的代码。求神!
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
memo_1->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_setClick(TObject *Sender)
{
compt->ShowSetupDialog();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_open_closeClick(TObject *Sender)
{
if(compt->Connected)
{
compt->Close();
btn_open_close->Caption="打开串口";
}
else
{
compt->Open();
btn_open_close->Caption="关闭串口";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_sendClick(TObject *Sender)//
{
AnsiString Str;

Str=edt_send->Text;
Str=Str+"/r/n";
compt->WriteStr(Str);
//memo_1->Text="yes,you are right!/r/n";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::comptRxChar(TObject *Sender, int Count)
{
AnsiString Str;
compt->ReadStr(Str,Count);
memo_1->Text=memo_1->Text+Str;
}
//---------------------------------------------------------------------------
其实是把AnsiString Str类型的转换成16进制的
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-02-13 12:53
引用一下别人的答案,C语言的,原理一样,在CB中操作起来更简单一些!

//函 数 名:AscToHex()
//功能描述:把ASCII转换为16进制
unsigned char AscToHex(unsigned char aHex){
if((aHex>=0)&&(aHex<=9))
aHex += 0x30;
else if((aHex>=10)&&(aHex<=15))//A-F
aHex += 0x37;
else aHex = 0xff;
return Hex;
}

//函 数 名:HexToAsc()
//功能描述:把16进制转换为ASCII
unsigned char HexToAsc(unsigned char aChar){
if((aChar>=0x30)&&(aChar<=0x39))
aChar -= 0x30;
else if((aChar>=0x41)&&(aChar<=0x46))//大写字母
aChar -= 0x37;
else if((aChar>=0x61)&&(aChar<=0x66))//小写字母
aChar -= 0x57;
else aChar = 0xff;
return aChar;
}
全部回答
  • 1楼网友:酒者煙囻
  • 2021-02-13 13:04
引用一下别人的答案,c语言的,原理一样,在cb中操作起来更简单一些! //函 数 名:asctohex() //功能描述:把ascii转换为16进制 unsigned char asctohex(unsigned char ahex){ if((ahex>=0)&&(ahex<=9)) ahex += 0x30; else if((ahex>=10)&&(ahex<=15))//a-f ahex += 0x37; else ahex = 0xff; return hex; } //函 数 名:hextoasc() //功能描述:把16进制转换为ascii unsigned char hextoasc(unsigned char achar){ if((achar>=0x30)&&(achar<=0x39)) achar -= 0x30; else if((achar>=0x41)&&(achar<=0x46))//大写字母 achar -= 0x37; else if((achar>=0x61)&&(achar<=0x66))//小写字母 achar -= 0x57; els... else if((ahex>:hextoasc() /=0)&&(ahex<=0x46))/ else if((achar>/大写字母 achar -= 0x37;/=0x39)) achar -= 0x30;函 数 名;=15))/,原理一样; else achar = 0xff;/=0x66))/小写字母 achar -= 0x57:把ascii转换为16进制 unsigned char asctohex(unsigned char ahex){ if((ahex>/a-f ahex += 0x37;函 数 名; return achar,在cb中操作起来更简单一些; return hex;/,c语言的;=10)&&(ahex } /=0x61)&&(achar<:asctohex() /! /=9)) ahex += 0x30;=0x30)&&(achar< else if((achar>/ else ahex = 0xff;功能描述:把16进制转换为ascii unsigned char hextoasc(unsigned char achar){ if((achar>=0x41)&&(achar<引用一下别人的答案;功能描述
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯