Duvida Java

Pessoal eu tenho o seguinte comando em C que preciso converter para Java:

cks=(((~v_check_sum)+1)|0x80)&0x00ff;

Onde ~v_check_sum serve para inverter os valores,
b+1 [/b] soma 1 ao valor,
0x80 Seta o Bit 7 para não ser menor que 32
&0x00ff Zera a parte alta para não passar de 255 (Byte)

Agradeço se alguém puder me ajudar.

O que é que você precisa converter?
Os operadores de bits são iguaizinhos em C e em Java e funcionam do mesmo jeito.
O Java tem apenas um operador a mais, que é o “>>>” e serve para contornar o fato que não existe tipo “unsigned” em Java (exceto o “char”, que funciona mais ou menos como se fosse um “unsigned short” em plataformas onde o “short” tem 16 bits). Mas o resto funciona igualzinho.
Tou achando que você está se enrolando com tipos de variáveis, não com operadores. Passe as declarações das variáveis aqui que são elas que precisam ser revisadas.

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");
                }
       }
}

Ah, agora entendi…

(Mais ou menos, que eu sou péssimo para ler fontes que os outros escreveram. Ainda mais quando uma função tem mais de 30 linhas :roll: )

Basta declarar v_check_sum como int, inicializar com zero, e somar os valores que devem ser somados (não entendi no seu programa onde é que você soma os valores, se é que você está somando). Depois você aplica aquela fórmula daquele jeito mesmo e veja se dá o resultado esperado.