thingol eu tenho a seguinte string que tenho de enviar para um painel digital
Acima tenho o “027” como “INI” e respectivamente os outros valores em string e em decimal.
v_check_sum=034+033+033+033+032+066+079+049+032+032+032+032+057+057+044+057+057+032+032;
O valor do chk quando calculado para esta string deve dar 177
Como podes observar o meu v_check_sum precisa somar todos os valores da string menos o “027”. Meu cks será obtido a partir do cálculo da função que lhe passei: cks=(((~v_check_sum)+1)|0x80)&0x00ff;
Abaixo segue o programa onde tento enviar dados para o painel, sendo que preciso montar o cálculo do chk e meu problema é que estou convertendo os valores de string para hexa e para fazer a soma no v_check_sum eu preciso transformar os valores em inteiros. Agradeço se puder me ajudar.
import Painel_JDJ.*;
public class Stest5 extends SerialCom {
public Stest5(){
super();
}
public static void main(String[] args){
String frame_="";
String meio_string;
int linha1int, v_check_sum, hexa_stringint, cabecalhoint;
StringBuffer inicio_string = new StringBuffer("1B");
String inicio_stringHexToString = new String("");
for(int i = 0; i < inicio_string.length(); i += 2){
String inicio_stringTemp = inicio_string.substring(i, i + 2);
inicio_stringHexToString += new Character((char)(Integer.valueOf(inicio_stringTemp,16).intValue())).toString();
frame_=inicio_stringHexToString;
}
System.out.println("Inicio:" + inicio_string);
StringBuffer cabecalho = new StringBuffer("2221212120FE22");
String cabecalhoHexToString = new String("");
for(int i = 0; i < cabecalho.length(); i += 2){
String cabecalhoTemp = cabecalho.substring(i, i + 2);
cabecalhoHexToString += new Character((char)(Integer.valueOf(cabecalhoTemp,16).intValue())).toString();
frame_=cabecalhoHexToString;
}
System.out.println(cabecalho);
meio_string = JOptionPane.showInputDialog( "Digite a String" );
System.out.println(meio_string);
StringBuffer hexa_buf = new StringBuffer();
for (int i = 0; i < meio_string.length(); i++) {
char ch = meio_string.charAt(i);
if (ch < 0x10)
hexa_buf.append('0'); // addiciona zero para numeros com só uma casa
hexa_buf.append(Integer.toHexString(ch & 0xFF));
}
String hexa_string = hexa_buf.toString(); // aqui só o codigo hexadecimal
System.out.println(hexa_string);
StringBuffer linha1 = new StringBuffer("04");
String linha1HexToString = new String("");
for(int i = 0; i < linha1.length(); i += 2){
String linha1Temp = linha1.substring(i, i + 2);
linha1HexToString += new Character((char)(Integer.valueOf(linha1Temp,16).intValue())).toString();
frame_=linha1HexToString;
}
System.out.println(linha1);
//v_check_sum=(cabecalho + meio_string1);
//System.out.println(v_check_sum);
String concatenaHexToString= (inicio_stringHexToString + cabecalhoHexToString + meio_string + linha1HexToString );
Stest5 st = new Stest5();
if ( st.PortaExiste("COM1") == true) {
System.out.println("Iniciando comunicação!");
SComm sc = new SComm("COM1",19200,1);
sc.HabilitarEscrita();
sc.ObterIdDaPorta();
sc.AbrirPorta();
sc.EnviarUmaString(concatenaHexToString);
System.out.println(concatenaHexToString);
sc.FecharCom();
Stest5 st2 = new Stest5();
if ( st2.PortaExiste("COM1") == true) {
System.out.println("Iniciando comunicação!");
SComm sc2 = new SComm("COM1",19200,1);
sc2.HabilitarLeitura();
sc2.ObterIdDaPorta();
sc2.AbrirPorta();
sc2.LerDados();
sc2.FecharCom();
}
} else {
System.out.println("Nenhuma porta");
}
}
}