在MEMO里将0x12,0x34,0x71,0x28,转换成0x21,0x43,0x17,0x82,

tianyekpsex 2012-10-23 10:55:11
在MEMO里将0x12,0x34,0x71,0x28,转换成0x21,0x43,0x17,0x82,代码如何实现,刚开始学习BCB。请大家帮忙一下。
...全文
357 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyekpsex 2012-10-26
  • 打赏
  • 举报
回复
灰常感谢bigfog.
bigfog 2012-10-25
  • 打赏
  • 举报
回复
既然是固定的字符串格式,直接交换位置不是效率更高


//把你的代码稍微修改了一下,bcb6下调试过
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String str;
char ch;
int n = StrToInt(Memo1->Lines->Count);//取得MEMO里有多少行
int tmp;

for(int i=0; i<n; i++)
{
str=Memo1->Lines->Strings[i]; //取行字符串
tmp = str.Length(); //取得行字符串的字符数
for(int j=0; j<tmp/5; j++)
{ //执行第3和第4位的字符交换(注意这里的下标是从1开始的)
ch=str[j*5+3];
str[j*5+3]=str[j*5+4];
str[j*5+4]=ch;
}
Memo1->Lines->Strings[i] = str;//显示转换后一行字符串
}
}
cptang 2012-10-24
  • 打赏
  • 举报
回复

TStringList *pList = new TStringList() ;
pList->Delimiter = ',' ;
pList->DelimitedText = Memo1->Text ;

Memo1->Clear() ;
int tmpInt = 0 ;;
for(int i = 0; i < pList->Count; i++)
{
tmpInt = pList->Strings[i].ToIntDef(0) ;
tmpInt<<= 4 ;
tmpInt |= (tmpInt>>8) ;
tmpInt &= 0xff ;
Memo1->Text = Memo1->Text + "0x" + IntToHex(tmpInt,2) + ",";
}
delete pList ;
ccrun.com 2012-10-24
  • 打赏
  • 举报
回复
我想了解的是,楼主存放的是ASCII码为0x12的字符?还是"0x12"的字符串?
缘中人 2012-10-24
  • 打赏
  • 举报
回复
实现就可以了
tianyekpsex 2012-10-24
  • 打赏
  • 举报
回复
谢谢上面各位大虾,我的问题已经解决。其实我是搞单片机软件的。只是有时候要用到数据转换或者图片转换,所以要用到应该软件,但单片机方面的应用小软件都是有各自的需求,因而要自己写应用小软件,本来想学VB的,但多年搞C语言了,所以选择BCB6.0,毕业很多年了,在学校也没有学过BCB,当时也不知道BCB是最具开发速度的,那时学习VC++,学了半年都没有学会,问了高手说学VC++不是要半年一年的所能够学得会,要常年学。后放弃学VC++。工作很多年后,才发现应用软件对单片机方面还是很有用的。现在一切重新学起,但看到BCB已是昨日黄花,实在让我心寒啊。难得有妖哥鼎力撑住,真是难能可贵啊。感谢妖哥,感谢群里的各位。

我的问题解决如下:大家看看还有改进不.
0x1E,0x54,0x63,0x5F,0x29,0xE9,-》0xE1,0x45,0x36,0xF5,0x92,0x9E,
0x3E,0xDA,0x58,0x03,0x95,0x86,-》0xE3,0xAD,0x85,0x30,0x59,0x68,

代码如下:
n = StrToInt(Memo1->Lines->Count);//取得MEMO里有多少行

if(RadioButton1->Checked == true)
{
for(i=0; i<n; i++)
{
tmp = Memo1->Lines->Strings[i].Length();//取得每行的字符数
for(j=0; j<tmp/5; j++)
{
strs[j] = Memo1->Lines->Strings[i].SubString(j*5+1,4);//取得如:0x1E
tmp1 = StrToInt(strs[j]);//转成十进制
tmp1 = ((tmp1>>4)&0x0f)|((tmp1<<4)&0xf0);//高低位互换
strs[j] = "0x" + IntToHex(tmp1,2) + ",";//组装成如:0xE1
str = str + strs[j];//组装一行
}
Memo1->Lines->Strings[i] = str;//显示转换后一行字符串
str = "";
}
}

bigfog 2012-10-24
  • 打赏
  • 举报
回复
unsigned char ch=0x12;
unsigned char aa,bb;
aa=ch<<4;
bb=ch>>4;
ch=aa||bb; //ch=0x21
tianyekpsex 2012-10-23
  • 打赏
  • 举报
回复
在MEMO里将0x12,0x34,0x71,0x28,转换成0x21,0x43,0x17,0x82,代码如何实现,刚开始学习BCB。请大家帮忙一下。我指的是在一行数据,而转换后也是覆盖之前的数据,而且也是一行显示,而不是竖行显示。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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