首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析十六进制传入/创建传出字符串

解析十六进制传入/创建传出字符串
EN

Stack Overflow用户
提问于 2016-12-14 22:30:33
回答 1查看 156关注 0票数 1

我修改了一个从串行发送和接收的示例,这很好。

我连接到的设备有三个命令,我需要使用。我的经验是C。

MAP -返回一个field_names、(十进制)值和(十六进制)地址的列表,我可以跟踪哪些值作为十进制或十六进制返回。每一行都以CR ::示例结尾

成员:10(十进制)成员名

每个名称字符串的NAME_LENGTH:15 -(十进制)长度

从地址(0x0A34)开始的(15)字符的NAME_BASE:0A34 -10c字符串(可能在每个空终止符后面有垃圾)

等。

GET 十六进制-返回从(十六进制)开始的2-字符十六进制值的列表。

返回的字节是字节/int/long和以CR ::示例::以空终止的c-字符串的混合。

get 0a34 10 --将返回

0A34< 54 65 73 74 20 4D 65 20 4F 75 74 00 40 D3 23 0B

这恰好是'Test‘(00),后面是垃圾等等。

将十六进制值{{值.}发送多个十六进制字节值,从十六进制地址开始,以CR/LF结束

这些字节是字节/int/long和以空结尾的c-字符串::示例的混合。

投0a34 50 75 73 68 - (ascii推杆)

将取代0x0A34的前4个字符成为“Push Me Out”

保存好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-14 22:52:02

请参阅我先前关于串行处理的答案,这可能是有用的Serial Port Polling and Data handling

若要将您的答复转换为实际文本:-

代码语言:javascript
复制
var s = "0A34 < 54 65 73 74 20 4D 65 20 4F 75 74 00 40 D3 23 0B";

var hex = s.Substring(s.IndexOf("<") + 1).Trim().Split(new char[] {' '});
var numbers = hex.Select(h => Convert.ToInt32(h, 16)).ToList();
var toText = String.Join("",numbers.TakeWhile(n => n!=0)
    .Select(n => Char.ConvertFromUtf32(n)).ToArray());
Console.WriteLine(toText);

其中:-跳过字符串直到<字符之后,然后将其余字符串拆分为十六进制字符串

然后,将每个十六进制字符串转换为into (基数为16 )。

然后,取每个数字,直到找到0为止,并将每个数字转换为文本(使用UTF32编码)。

然后,我们将所有转换的字符串连接在一起重新创建原始文本。

或者,更浓缩

代码语言:javascript
复制
var hex = s.Substring(s.IndexOf("<") + 1).Trim().Split(new char[] {' '});
var bytes = hex.Select(h => (byte) Convert.ToInt32(h, 16)).TakeWhile(n => n != 0);
var toText = Encoding.ASCII.GetString(bytes.ToArray());

将数字转换为十六进制:-

代码语言:javascript
复制
Console.WriteLine(123.ToString("X"));
Console.WriteLine(123.ToString("X4"));
Console.WriteLine(123.ToString("X8"));
Console.WriteLine(123.ToString("x4"));

此外,您还会发现使用十六进制数据在https://msdn.microsoft.com/en-us/library/bb311038.aspx中有很好的文档记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41153355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档