delphi中怎样把string转为array of byte?

尘小陌 2013-06-06 05:07:33
如,我的string为CA 01 A0 A1,我要把其转换为byte数组然后用串口发出,如何能让设备收到的也是CA 01 A0 A1,而不是一串数字?
...全文
1092 25 打赏 收藏 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr Dang 2013-10-10
  • 打赏
  • 举报
回复
简单点就是
引用 24 楼 xhz8000 的回复:
function TForm1.HexStrToByte(HesStr: String): Byte; var iLen: Integer; begin Result := 0; iLen := length(HesStr); if iLen <> 2 then Exit; If not (HesStr[1] in ['0'..'9', 'A'..'F', 'a'..'f']) Then Exit; If not (HesStr[2] in ['0'..'9', 'A'..'F', 'a'..'f']) Then Exit; Result := StrToInt('$' + HesStr); end; 上面这个函数更简洁一些!
感谢楼主。 简而言之: Byte_Type_Var:=StrToInt('$' +String_Type_Var); //Length(String_Type_Var)<=2;
xhz8000 2013-06-07
  • 打赏
  • 举报
回复
function TForm1.HexStrToByte(HesStr: String): Byte; var iLen: Integer; begin Result := 0; iLen := length(HesStr); if iLen <> 2 then Exit; If not (HesStr[1] in ['0'..'9', 'A'..'F', 'a'..'f']) Then Exit; If not (HesStr[2] in ['0'..'9', 'A'..'F', 'a'..'f']) Then Exit; Result := StrToInt('$' + HesStr); end; 上面这个函数更简洁一些!
xhz8000 2013-06-07
  • 打赏
  • 举报
回复
function TForm1.HexStrToByte(HesStr: String): Byte; var iLen: Integer; begin Result := 0; iLen := length(HesStr); if iLen <> 2 then Exit; If not (HesStr[1] in ['0'..'9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f']) Then Exit; If not (HesStr[2] in ['0'..'9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f']) Then Exit; Result := StrToInt('$' + HesStr); end; procedure TForm1.Button1Click(Sender: TObject); const SHEX = 'CA01A0A1'; var iByte: Byte; sTemp: String; hexBuf: array[0..1023] of byte; iStart, iCount, idex: Integer; begin idex := 0; iStart := 1; fillchar(hexBuf, sizeOf(hexBuf), #0); iCount := length(SHEX) + 1; while iStart < iCount do begin sTemp := SHEX[iStart]; iStart := iStart + 1; if iStart >= iCount then Break; sTemp := sTemp + SHEX[iStart]; iByte := HexStrToByte(sTemp); ShowMessage(IntToHex(iByte, 2)); hexBuf[idex] := iByte; idex := idex + 1; iStart := iStart + 1; end; end; 就是上面的代码了! 你测试一下看看是不是你要的!
看那山瞧那水 2013-06-07
  • 打赏
  • 举报
回复
你的string中的字符是表示的16进制的数?那你可以直接StrToInt() 从源字符串中取出2个字符构成一个临时字符串 比如: s2:='CA'; s2:='$'+s2; aByte:=inttostr(s2); 哈哈,要说清楚啊
尘小陌 2013-06-07
  • 打赏
  • 举报
回复
引用 18 楼 ZyxIp 的回复:
你没有说明 你的String 是 CA 01 A0 A1 这是个字符串,不算前后空格共有11个字符,占用11个字节。 对方我想应该收的是4个字节吧,每个字节用16进制表示是CA 01 A0 A1. 至于是16进制显示,还是10进制显示,这是串口精灵软件的表示给你看方式,在内存中都是0和1。 如果你愿意你还可以用8进制来看。
我就是想要,如果我的STRING中是CA,那就给我转到BYTE后也是CA,或都数字202,可是我CA转过去后,变成ASCII码表上标的数字了
xhz8000 2013-06-07
  • 打赏
  • 举报
回复
楼主就是把你的字符串每两位组成一个byte发送??
尘小陌 2013-06-07
  • 打赏
  • 举报
回复
引用 18 楼 ZyxIp 的回复:
你没有说明 你的String 是 CA 01 A0 A1 这是个字符串,不算前后空格共有11个字符,占用11个字节。 对方我想应该收的是4个字节吧,每个字节用16进制表示是CA 01 A0 A1. 至于是16进制显示,还是10进制显示,这是串口精灵软件的表示给你看方式,在内存中都是0和1。 如果你愿意你还可以用8进制来看。
别扯 0 1这些没用的,照你这么说电影文件还是0 1 组成的呢我就问,我就是想问怎么把string中表示十六进制的东西原封不动的转成byte
ZyxIp 2013-06-06
  • 打赏
  • 举报
回复
你没有说明 你的String 是 CA 01 A0 A1 这是个字符串,不算前后空格共有11个字符,占用11个字节。 对方我想应该收的是4个字节吧,每个字节用16进制表示是CA 01 A0 A1. 至于是16进制显示,还是10进制显示,这是串口精灵软件的表示给你看方式,在内存中都是0和1。 如果你愿意你还可以用8进制来看。
尘小陌 2013-06-06
  • 打赏
  • 举报
回复
- -那为什么我用VC写的程序发送的时候,用串口精灵抓到的数据就是十六进制的,而不是十进制数字
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
接收端把数字变回字符, Chr(48) - '0' Chr(65) - 'A' Chr(97) - 'a'
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
串口当然只能传数字啊 ASCII就是数字,你找个ASCII码表看看 ‘0’-48, …… ‘9’-57, .... 'A' - 65, 'a' - 97
尘小陌 2013-06-06
  • 打赏
  • 举报
回复
引用 12 楼 jankercsdn 的回复:
bs:=setlenght(bs,lenght(s));这个要改成bs:=setlength(bs,lenght(s)); 哈哈....这个语法都能不过啊
过了,是我自己多加了个填充零的语句 不过我用串口精灵看了一下,我发出的数据还都为数字,是十进制的数字 有没有办法就把我的string原样不动的转为array of byte
xhz8000 2013-06-06
  • 打赏
  • 举报
回复
var bs:array[0..1023] of byte; begin fillchar(bs, sizeof(bs), #0); //这里假设你的S长度不大于1K move(PChar(s)^, bs, length(s)); //下面就是你的发送代码了 .... end;
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
bs:=setlenght(bs,lenght(s));这个要改成bs:=setlength(bs,lenght(s)); 哈哈....这个语法都能不过啊
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
什么错?bs没分配吧
尘小陌 2013-06-06
  • 打赏
  • 举报
回复
引用 9 楼 jankercsdn 的回复:
这个报错? bs[0]:=Ord('A'); 这个报错吗?
是的
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
这个报错? bs[0]:=Ord('A'); 这个报错吗?
尘小陌 2013-06-06
  • 打赏
  • 举报
回复
引用 7 楼 jankercsdn 的回复:
有些串口通信协议是用ASCII传输的,比如Modbus就有RTU(二进制方式)和ASCII方式
bs[i-1]:=Ord(s[i]); 这里报错
看那山瞧那水 2013-06-06
  • 打赏
  • 举报
回复
有些串口通信协议是用ASCII传输的,比如Modbus就有RTU(二进制方式)和ASCII方式
尘小陌 2013-06-06
  • 打赏
  • 举报
回复
引用 4 楼 jankercsdn 的回复:
var bs:array of byte; bs:=setlenght(bs,lenght(s)); for i:=1 to lenght(s) do bs[i-1]:=Ord(s[i]); ...接收方用Chr(bs[j]) ASCII码,没概念?
没弄过这方面的东西,以前都是写数据库和网络
加载更多回复(5)
打开链接下载源码: https://pan.quark.cn/s/4d098ab046d1 ### 基于内容推荐机制:个性化服务的关键基础 #### 阐述 在信息数字化急剧增长的时代背景下,如何从庞大的数据资源中筛选出用户真正关注的资讯,成为了一个亟待解决的挑战。推荐机制应运而生,致力于为用户提供个性化的服务,协助其有效管理信息过载的问题。依据《下一代推荐系统的方向:当前技术的综述与可能的拓展》一文,作者Gediminas Adomavicius和Alexander Tuzhilin全面地梳理了推荐系统领域,详尽介绍了当前推荐技术的三大主要类别:内容驱动、协同过滤以及混合推荐策略。 #### 内容驱动推荐机制深入解析 内容驱动推荐机制是一种通过审视用户的历史行为和偏好,结合项目(例如书籍、电影)的内容特征进行推荐的技术。这种方法的核心在于构建一个模型,该模型能够把握用户的兴趣并预测用户对未接触项目的可能偏好。具体而言,内容驱动推荐机制会采集用户的历史行为数据,诸如购买记录、浏览历史等,同时收集项目本身的属性信息,例如书籍的作者、主题、关键词,电影的导演、演员、类型等。通过比较用户已知喜好和项目属性之间的相似程度,系统可以向用户推荐与其过往兴趣相契合的新项目。 #### 技术要点与操作流程 内容驱动推荐机制通常包含以下几个环节: 1. **特征抽取**:从用户历史行为和项目特征中提取关键信息,构建特征向量。 2. **相似度评估**:运用余弦相似度、皮尔逊相关系数等方法计算用户与项目之间的相似程度。 3. **推荐产生**:根据相似度得分,为用户生成推荐清单。 4. **响应收集**:获取用户对推荐结果的反馈,持续优化模型参数,以提升推荐的精确度。 #### 优点与不...

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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