Значение передачи Socket как Hex - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь передать значение String в сокете на другой сервер. Другой сервер должен получить значение в шестнадцатеричном формате.

Т.е. если моя строка s = "600185838e" на сервере, она должна получить как 60 01 85 83 8e, но эти отправленные мной значения были преобразованы в ASCII и не в нужном формате.

Я использую сокетное соединение

BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));

wr.write(messageBody);

wr.flush(); 

Как я могу отправить свое строковое значение, подобное шестнадцатеричному значению?

Заранее благодарю всех

Ответы [ 2 ]

5 голосов
/ 05 апреля 2011

Вы должны преобразовать шестнадцатеричную строку в байтовый массив и затем отправить его как байтовый массив:

OutputStream out = this.socket.getOutputStream();
out.write(yourBytearray);

Это метод для преобразования шестнадцатеричной строки в байтовыйкопия ссылки, которую я дал, но я скопировал ее здесь, чтобы понять, о чем я говорю:

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}
0 голосов
/ 05 апреля 2011

Вы также можете попробовать разбить строку на 2-символьные длинные строки и преобразовать их в отдельные байты с помощью Byte.parseByte (my2CharString, 16), а затем отправить их

Вот код, который будет делать то, что вы хотите, просто замените System.out.println () на write () <- необходимо записать только один байт: </p>

String output = "ffee101";
    while(output.length() > 0){
        String byteToWrite;
        if(output.length() <= 2){
            byteToWrite = output;
            output = "";
        }
        else{
            byteToWrite = output.substring(0,2);
            output = output.substring(2);
        }
        byte b = (byte)Short.parseShort(byteToWrite, 16);
        System.out.println(b);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...