2012-06-07 2 views
3

Я новичок в форумах и, возможно, разместил это неправильно, пожалуйста, помогите новичкам.Android - Java - Передающие/принимающие значения шестнадцатеричного значения

Как часть проекта по разработке приложения для Android, мне нужно иметь возможность подключаться из приложения к заданному местоположению, которое имеет небольшой интерфейс на основе микропроцессора (без возможности подключения), который будет принимать команды набора в шестнадцатеричном формате. Ответ указан в шестнадцатеричном формате.

Использование примерной программы сокетов, которую я попытался изменить (см. Код ниже), я вижу (используя wirehark), что переданная строка находится в ASCII, а не в hex, поэтому я отправляю 38 байт, а не 18 с префиксом 0x.

Я пробовал использовать LONG, но значение, которое я пытаюсь отправить, слишком велико (см. String process = '0x .....' на полпути через код), и я получаю 'Литерал 0x .. .. типа int вне диапазона.

Я хотел бы, чтобы кто-то указал мне в правильном направлении.

Благодаря

// package bdn; 
/* The java.net package contains the basics needed for network operations. */ 
import java.net.*; 
/* The java.io package contains the basics needed for IO operations. */ 
import java.io.*; 
/** The SocketClient class is a simple example of a TCP/IP Socket Client. 
* For a detailed explanation of the classes in this project see 
* bdn.borland.com/article/0,1410,31995,00.html 
*/ 

public class SocketClient 
{ 
    public static void main(String[] args) 
    { 
     /** Define a host server */ 
     String host = "192.168.1.199"; 
     /** Define a port */ 
     int port = 3376; 
     int i = 0; 

     StringBuffer instr = new StringBuffer(); 
     // String TimeStamp; 
     System.out.println("SocketClient initialized to " + host + ", port " + port); 

     try 
     { 
      /** Obtain an address object of the server */ 
      InetAddress address = InetAddress.getByName(host); 
      /** Establish a socket connection */ 
      Socket connection = new Socket(address, port); 
      /** Instantiate a BufferedOutputStream object */ 
      BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); 

      /** Instantiate an OutputStreamWriter object with the optional character 
      * encoding. 
      */ 
      OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII"); 

      // TimeStamp = new java.util.Date().toString(); 
      String process = "0x308101000c00234C51050000000099670007"; 

      System.out.println("Data to be sent is " + process) ; 

      /** Write across the socket connection and flush the buffer */ 
      osw.write(process); 
      osw.flush(); 

      System.out.println("Data sent is " + process) ; 

      /** Instantiate a BufferedInputStream object for reading 
      * incoming socket streams. 
      */ 

      BufferedInputStream bis = new BufferedInputStream(connection.getInputStream()); 
      /**Instantiate an InputStreamReader with the optional 
      * character encoding. 
      */ 

      InputStreamReader isr = new InputStreamReader(bis, "US-ASCII"); 

      /**Read the socket's InputStream and append to a StringBuffer */ 
      int c; 
      for (i = 0; i <= 18; i++) 
      { 
       c = isr.read() ; 
       instr.append((char) c); 
       System.out.println("character " + i + " value " + c); 
      } 

      /** Close the socket connection. */ 
      connection.close(); 
      System.out.println(instr); 
     } 
     catch (IOException f) 
     { 
      System.out.println("IOException: " + f); 
     } 
     catch (Exception g) 
     { 
      System.out.println("Exception: " + g); 
     } 
    } 
} 

ответ

2

Я попытался с помощью LONG, но значение, которое я пытаюсь отправить слишком большой

Это верно. Значение соответствует

4225287479528688525220725405996728206163975 

и максимальное значение долго является

9223372036854775807 

Вы можете сохранить номер в BigInteger следующим образом:

String process = "0x308101000c00234C51050000000099670007"; 
BigInteger bi = new BigInteger(process.substring(2), 16); 
+0

Спасибо за вход, в то время как это помогает с точки зрения возможности представления BigInteger, это приводит к сбою OutputStreamWriter, поскольку он не применим для аргумента BigInteger. Есть ли альтернатива, которая позволит мне буферизировать, а затем написать шестнадцатеричный вывод, а затем получить его также? благодаря – user1441477

Смежные вопросы