如何将字符串转换为int然后转换为字符串?

abd*_*man 6 .net c# number-systems

我试图搜索我的问题的副本,但找不到.此外,抱歉不那么容易理解的标题.我对我正在搜索的内容以及术语也很困惑.我是一名电子工程师,对.Net框架知之甚少,所以请好好对待:)

我目前的项目是一个心率监测器,它可以将测得的心率存储到EEPROM中,然后发送到PC进行日志查看.

我正在使用RS-232(串行)协议与8位微控制器连接.每当我发送一个l代表log微控制器的字符时,它会以下列格式向我发送一些信息:

0x1E 0x21 0x01 0x13 0x14 0x35 0x46 0x1E 0x21 0x01 0x13 0x14 0x43 0x48 0x0A 0x0D
Run Code Online (Sandbox Code Playgroud)

空白空间用于信息目的,这些字节不是彼此分开的.

从微控制器发送的这些8位HEX值包括记录信息的开始,即0x1EDD MM YY HH MM格式的日期和时间以及记录的心率.当所有记录都被回显时,则发送0x0A和0x0D字符.

例如,上面的代码表示:

Record start.
21.01.13 14:35
Heart Rate: 70
Record start.
21.01.13 14:43
Heart Rate: 72
End of records.
Run Code Online (Sandbox Code Playgroud)

我怎么能得到这样的字符串值:"S210113143570S210113144372",哪里S可以是任何东西.之后,我将对此应用正则表达式语法并将其划分为组,以便我可以将这些值添加到listview控件中.

评论和答案后编辑:

我没有写错误的样本.不幸的是,编码与上面完全一样.

Dan*_*rth 5

所以,实际上每个字节代表一个数字.我假设你已经有一个byte[]包含这些值的数组:

var data = new byte[] { 0x1E, 0x21, 0x01, 0x13, 0x14, 0x35, 0x46,
                        0x1E, 0x21, 0x01, 0x13, 0x14, 0x43, 0x48, 0x0A, 0x0D };
Run Code Online (Sandbox Code Playgroud)

你现在可以像这样创建真实的对象:

class LogEntry
{
    public DateTime Timestamp { get; set; }
    public int HeartRate { get; set; }
}

var logEntries = new List<LogEntry>();

for(int i = 0; i < data.Length; i+= 7)
{
    if(data[i] == 0x0a && data[i + 1] == 0x0d)
        break;
    if(data[i] != 0x1e)
        throw new InvalidDataException();

    var logEntry = new LogEntry();
    var year = BcdToDecimal(data[i + 3]) + 2000;
    var month = BcdToDecimal(data[i + 2]);
    var day = BcdToDecimal(data[i + 1]);
    var hour = BcdToDecimal(data[i + 4]);
    var minute = BcdToDecimal(data[i + 5]);
    var heartRate = data[i + 6];
    logEntry.Timestamp = new DateTime(year, month, day, hour, minute, 0);
    logEntry.HeartRate = heartRate;
    logEntries.Add(logEntry);
}

byte BcdToDecimal(byte bcdValue)
{
    return (byte)((bcdValue / 16 * 10) + (bcdValue % 16));
}
Run Code Online (Sandbox Code Playgroud)

该方法BcdToDecimal将BCD转换为其实际值.