c# 实现LRC校验码函数byte[] code = { 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1 };
int sum = 0;
foreach (byte b in code)
{
sum += b;
}
sum =sum % 255;//模FF
sum = ~sum + 1;//取反+1
string lrc = Convert.ToString(sum, 16);
sum最后的结果是-5,转成16进制的字符串是fffffffc,因为sum是用int表示的 , 是32位的 。
请用java编程:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Lyric2Text {
public void doWork(String lyric) throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(lyric), "utf8"));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(lyric.substring(0, lyric.lastIndexOf('.')) + ".txt"), "utf8"));
String line;
while((line = reader.readLine()) != null){
line = line.replaceAll("\\[[0-9:\\.]+\\]", "");
writer.write(line + "\n");
}
reader.close();
writer.close();
}
public static void main(String[] args) throws IOException {
Lyric2Text tmp = new Lyric2Text();
tmp.doWork("C:\\Users\\admin\\Desktop\\一帘幽梦.lrc");
}
}
Message time out , 该怎么解决Modbus两种协议lrc校验java代码的编程方法:
1、LRC校验
LRC域是一个包含一个8位二进制值的字节 。LRC值由传输设备来计算并放到消息帧中lrc校验java代码,接收设备在接收消息的过程中计算LRClrc校验java代码,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误 。
LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容 。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可 。下面是它对应的代码:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码
{
BYTE byLrc = 0;
char pBuf[4];
int nData = https://www.04ip.com/post/0;
for(i=1; iend; i+=2) //i初始为1,避开“开始标记”冒号
{
//每两个需要发送的ASCII码转化为一个十六进制数
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x", nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校验
CRC域是两个字节,包含一16位的二进制值 。它由传输设备计算后加入到消息中 。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同 , 则有误 。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理 。仅每个字符中的8Bit数据对CRC有效 , 起始位和停止位以及奇偶校验位均无效 。
CRC产生过程中 , 每个8位字符都单独和寄存器内容相或(OR) , 结果向最低有效位方向移动,最高有效位以0填充 。LSB被提取出来检测,如果LSB为1 , 寄存器单独和预置的值或一下,如果LSB为0,则不进行 。整个过程要重复8次 。在最后
java解析lrc文件代码lrc可以通过如下util工具类进行转换lrc校验java代码 , 如果想知道结果是否读取lrc校验java代码的有问题 , 可以直接用记事本打开lrc文件lrc校验java代码的,之后和输出结果比对一下就行 。
package com.routon.utils;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
- java查询数组中是否包含某一个值 javamongodb数组查询
- redis实战电子书 redisjava书籍
- javaredis集群 javaredis列队
- Redis队列排队 redis队列java
- java mongodb aggregate mongodb的教程java
- redis实现秒杀功能java redis和mq实现秒杀
- redis队列实现秒杀java redis推时队列
- java redis面试 javaredis试题
- spring监听redis队列 java中redis监听
- java中redis javaredis异常
