преобразование байтового массива в шестнадцатеричную строку с разделителем? Удалить последний символ, отображаемый в строке? - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над программой, которая преобразует байтовый массив, скажем, {13,13,12,12,4,4,4,4} в 13d: 12 c: 44: 44, (1- 15 в десятичном виде) (1-15 в шестнадцатеричном): и до следующих двух цифр. Мой код ниже работает и печатает то, что я хочу, за исключением того, что он всегда включает: в конце. Таким образом, вместо (13d: 12 c: 44: 44) вывод будет (13d: 12 c: 44: 44 :). Я пытался играть с оператором else if с двумя условиями, но он не работает, если какие-либо цифры являются последовательными. В противном случае, если условие я включил в печать вместо этого (13d: 12 c: 4444).

public static void main(String []args){

    byte [] pracArray = {13,13,12,12,4,4,4,4};

    for ( int i = 0; i < pracArray.length; i+=2)
    {
        if ( pracArray[i] == 0) { System.out.print("0");}
        if ( pracArray[i] == 1) { System.out.print("1");}
        if ( pracArray[i] == 2) { System.out.print("2");}
        if ( pracArray[i] == 3) { System.out.print("3");}
        if ( pracArray[i] == 4) { System.out.print("4");}
        if ( pracArray[i] == 5) { System.out.print("5");}
        if ( pracArray[i] == 6) { System.out.print("6");}
        if ( pracArray[i] == 7) { System.out.print("7");}
        if ( pracArray[i] == 8) { System.out.print("8");}
        if ( pracArray[i] == 9) { System.out.print("9");}
        if ( pracArray[i] == 10) { System.out.print("10");}
        if ( pracArray[i] == 11) { System.out.print("11");}
        if ( pracArray[i] == 12) { System.out.print("12");}
        if ( pracArray[i] == 13) { System.out.print("13");}
        if ( pracArray[i] == 14) { System.out.print("14");}
        if ( pracArray[i] == 15) { System.out.print("15");}

        if( pracArray[i+1] == 0) {System.out.print("0:");}
        if( pracArray[i+1] == 1) {System.out.print("1");}
        if( pracArray[i+1] == 2) {System.out.print("2:");}
        if( pracArray[i+1] == 3) {System.out.print("3:");}
        if( pracArray[i+1] == 4 && pracArray[pracArray.length-1] == 4) {System.out.print("4");}
        else if( pracArray[i+1] == 4)  {System.out.print("4:");}
        if( pracArray[i+1] == 5) {System.out.print("5:");}
        if( pracArray[i+1] == 6) {System.out.print("6:");}
        if( pracArray[i+1] == 7) {System.out.print("7:");}
        if( pracArray[i+1] == 8) {System.out.print("8:");}
        if( pracArray[i+1] == 9) {System.out.print("9:");}
        if( pracArray[i+1] == 10) {System.out.print("a:");}
        if( pracArray[i+1] == 11) {System.out.print("b:");}
        if( pracArray[i+1] == 12) {System.out.print("c:");}
        if( pracArray[i+1] == 13) {System.out.print("d:");}
        if( pracArray[i+1] == 14) {System.out.print("e:");}
        if( pracArray[i+1] == 15) {System.out.print("f:");}


}

}

Буду признателен за любую помощь в том, как исправить мой код, когда повторяющиеся цифры нашел или способ с меньшим количеством кода, так как я начинающий. Есть ли способ просто не отображать последний символ в строке? Таким образом, я думаю, что мой оригинальный код будет работать, так как конечный символ всегда будет: и он не будет напечатан.

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Я пытался помочь, не кормив вас ответом, так как он не одобряется на этом сайте. Так много для этого. Итак, вот как вы должны это сделать.

        int[] nums= {13,13,12,12,4,4,4,4};
        String syms = "0123456789ABCDEF";

        for (int i = 0; i < nums.length-1; i+=2) {
           // Use String.charAt() for getting Hex token
           System.out.print(nums[i]+"" + syms.charAt(nums[i+1]));
           if (i < nums.length-2) {
               // decide when to print ending colon.
               System.out.print(":");
           }
        }
1 голос
/ 09 марта 2020

Вы используете слишком много операторов if, но прежде, чем я начну, давайте исправим ваш код.

Ваш код можно исправить, не печатая двоеточия в операторах if, а вставляя if операторы в конце, который проверяет, является ли это последней итерацией l oop, и печатает двоеточие, только если оно не .

// no colons here!
if( pracArray[i+1] == 0) {System.out.print("0");}
if( pracArray[i+1] == 1) {System.out.print("1");}
if( pracArray[i+1] == 2) {System.out.print("2");}
if( pracArray[i+1] == 3) {System.out.print("3");}
if( pracArray[i+1] == 4) {System.out.print("4");}
if( pracArray[i+1] == 5) {System.out.print("5");}
if( pracArray[i+1] == 6) {System.out.print("6");}
if( pracArray[i+1] == 7) {System.out.print("7");}
if( pracArray[i+1] == 8) {System.out.print("8");}
if( pracArray[i+1] == 9) {System.out.print("9");}
if( pracArray[i+1] == 10) {System.out.print("a");}
if( pracArray[i+1] == 11) {System.out.print("b");}
if( pracArray[i+1] == 12) {System.out.print("c");}
if( pracArray[i+1] == 13) {System.out.print("d");}
if( pracArray[i+1] == 14) {System.out.print("e");}
if( pracArray[i+1] == 15) {System.out.print("f");}

// if last iteration of loop, print colon
if (i + 1 != pracArray.length - 1) {
    System.out.print(":");
}

Теперь давайте сократим ваш код :)

for ( int i = 0; i < pracArray.length; i+=2)
{
    // for the elements at even indices, you just print them out directly, no need for conversion or anything
    // so all your if statements are unnecessary
    System.out.print(pracArray[i]);

    // then it's the odd indices. If it's less than 10, handle them the same way
    if (pracArray[i + 1] < 10) {
        System.out.print(pracArray[i + 1]);
    } else {
        // but if it's >= 10, convert it to hex.
        System.out.print((char)('a' + pracArray[i + 1] - 10));
    }
    if (i + 1 != pracArray.length - 1) {
        System.out.print(":");
    }
}
...