Я новичок в форумах и, возможно, разместил это неправильно, пожалуйста, помогите новичкам.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);
}
}
}
Спасибо за вход, в то время как это помогает с точки зрения возможности представления BigInteger, это приводит к сбою OutputStreamWriter, поскольку он не применим для аргумента BigInteger. Есть ли альтернатива, которая позволит мне буферизировать, а затем написать шестнадцатеричный вывод, а затем получить его также? благодаря – user1441477