Matriz byte de uma string

6 respostas
rafael.luc

Ola

Estou sou novo em Java, estou querendo adicionar um valor (de tamanho de 1 Byte) em cada linha de uma matriz, o valor viria de uma string (vira de uma porta serial), mas no momento estou testando via teclado, o objetivo e extrair cada valor de uma string de 8 digitos ASCII.

package projeto; 
import java.util.Scanner;
 
public class Dinamico {
	 public static void main(String args[]) {
		 byte[]buffer = new byte[8];
		 System.out.println("Entre com o numero: ");  
		    Scanner sc = new Scanner(System.in);  
		    byte x = sc.nextByte();
		    for (int i= 7; i > 0; i--){ 
		    buffer[i]=x;
		    }
		    System.out.println(buffer[0]);
		    System.out.println(buffer[1]);
		    System.out.println(buffer[2]);
		    System.out.println(buffer[3]);
		    System.out.println(buffer[4]);
		    System.out.println(buffer[5]);
		    System.out.println(buffer[6]);
		    System.out.println(buffer[7]);
		 }
		}

6 Respostas

ViniGodoy

Use o método getBytes() da classe String.

rafael.luc

Desculpe a demora em replicar

Mas como eu implemento o getBytes(), no programa acima?

ViniGodoy
package projeto; 
import java.util.Scanner;
 
public class Dinamico {
    public static void main(String args[]) {                
        Scanner sc = new Scanner(System.in);  

        System.out.println("Entre com o numero: ");  
        String num = sc.nextLine();

        byte buffer[] = num.getBytes();
        for (int i = 0. i < num.length; i++) {
            System.out.println(buffer[i]);
        }
    }
}
rafael.luc

Valeu pela ajuda @ViniGodoy. Apenas tive que substituir o

for (int i = 0. i < num.length; i++) {

por

for (int i = 0; i < num.length(); i++) {

Os números lidos estão aparecendo na codificação ASCII (1 = 49, 2 = 50…etc), mas isso é fácil de resolver bastando diminuir de 48 ( que é igual a 0 em numeral).
Gostaria de saber se tem alguma propriedade para transformar parte da String em um inteiro valido.
Meu codico é de 8 dígitos, os trés últimos compõem um valor de 1 ate 999.

Obrigado

ViniGodoy

Use o método Integer.parseInt para converter uma String num inteiro.
E use o método substring da String para extrair um pedaço da String.

Por exemplo

String teste = "ABC1234CDE"; int numero = Integer.parseInt(teste.substring(3, 4));

rafael.luc

Ok consegui fazer

public class Dinamico {
	 public static void main(String args[]) {
		 System.out.println("Entre com o numero: ");
		 Scanner sc = new Scanner(System.in);
		 String num = sc.nextLine();
		 byte readBuffer[] = num.getBytes();  
		 String numBytes = new String(readBuffer);   
		    if( 0 < numBytes.length()){ 
		    int id = Integer.parseInt(numBytes.substring(0, 1)); 
		    int funcao = Integer.parseInt(numBytes.substring(1, 2));
		    int tag = Integer.parseInt(numBytes.substring(2, 4));  	
		    int valor = Integer.parseInt(numBytes.substring(4, 7));
		    System.out.println(id);
		    System.out.println(funcao);
		    System.out.println(tag);
		    System.out.println(valor);
		 }

	 }
}

No codico acima eu poderia colocar a String (num) lida do teclado diretamente na substring o que ficou um tanto estranho ou desnecessário, mas os dados virão de porta serial que precisa de um Buffer, precisa ver como iria ficar usando o teclado. O codico real a ser implementado segue abaixo.

byte[] readBuffer = new byte[8];

            try {

               int numBytes = 0;

                while (inputStream.available() > 0) {

                    numBytes = inputStream.read(readBuffer);

                }

Problema resolvido

Obrigado pela ajuda :thumbup:

Criado 27 de outubro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 6
Participantes 2