2015-09-18 5 views
0

Итак, я работаю над методом на Java, который в основном принимает случайную строку букв, затем проходит через метод и изменяет строку на биты четности, которая в основном преобразует каждый символ в его числовое значение в двоичный файл.Изменение вывода в матрицы 4x4

Это то, что у меня есть:

public class ShiftData { 
    //this is the method that where Logic is implemented.. 
    static String shiftRows(String text) { 
     //character array to store given String elements into an array.. 
     char[] chs = text.toCharArray(); 
     StringBuffer samBuffer = new StringBuffer(); 
     //loop through the length of the character array.. 
     for (int i = 0; i < chs.length; i++) { 
      //adding characters to the StringBuffer... 
      samBuffer.append(Integer.toHexString((int) chs[i])); 
//   here in the above statement toHexString method pads parity bit and converts to hexadecimal value.. 
     } 
     return samBuffer.toString();//returning the value 
    } 
} 

Это код, который преобразует строку в 4x4 матрицы:

if(text !=null && !text.isEmpty()) { 
    int len = text.length(); 
    int rem = len %16; 
    int padChars = 16-rem; 


    for(int i =0; i < (len+padChars); i++) { 
     if(i < len) { 
      System.out.print(text.charAt(i)+ " "); 
     } else { 
      System.out.print("A "); 
     } 

     if((i+1) % 4 == 0) 
      System.out.println(); 
     if((i+1) % 16 == 0) 
      System.out.println("\n"); 

    } 
} 

Так в основном, если входная строка: WVOGJTXQHUHXICWYYMGHTRKQHQPWKYVGLPYSPWGOINTOFOPMO

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

d7 56 cf 47 

d4 d8 d1 ca 

48 d8 48 55 

59 c9 c3 d7 


59 4d 47 48 

d2 4b d1 d4 

50 d7 48 d1 

47 4b 59 56 

cc 50 59 53 

d7 47 cf 50 

d4 cf c9 4e 

4d c6 cf 50 


cf 41 41 41 

41 41 41 41 

41 41 41 41 

41 41 41 41 

Мне просто нужна помощь, комбинируя коды! Я могу заставить их работать отдельно, но я не могу получить требуемый результат. Пожалуйста, покажите, как вы это кодируете.

+0

Итак, какой результат вы получаете вместо этого? – RealSkeptic

+0

выход: 57564f474a5458514855485849435759594d474854524b51485150574b5956474c5059535057474f494e544f464f504d4f , как одна линия, но мне просто нужно выход ввести в блоки 4x4 –

+0

Ах, и вы, кажется, не хватает фактических битов четности. Я думаю, вы не поняли эту задачу. – RealSkeptic

ответ

1

Не использовать StringBuffer. Вместо этого используйте StringBuilder.

Ваш печатный контур пишет один письмо за раз, разделенное на 3 пробела (и символы новой строки). Буквы в шестнадцатеричном виде состоят из двух нулевых цифр, так как вы уже показываете желаемый результат, так что это не сработает.

Ваш код печатает пустые строки в конце, которые вы, вероятно, не хотите.

Integer.toHexString() будет возвращать одну цифру, если значение равно 0-15.

static String shiftRows(String text) { 
    char[] chs = text.toCharArray(); 
    StringBuilder samBuffer = new StringBuilder(); 
    for (int i = 0; i < chs.length; i++) 
     samBuffer.append(String.format("%02x", (int)chs[i])); // always 2 hex digits, even for 0-15 
    return samBuffer.toString(); 
} 

public static void main(String[] args) { 
    String text = shiftRows("WVOGJTXQHUHXICWYYMGHTRKQHQPWKYVGLPYSPWGOINTOFOPMO"); 
    if (text != null && ! text.isEmpty()) { 
     int len = (text.length() + 31)/32 * 32; // round up to next increment of 32 (16 hex pairs) 
     for (int i = 0; i < len; i += 2) { 
      if (i != 0 && i % 8 == 0) { // every 4 hex pairs, but not first time 
       System.out.println(); 
       if (i % 32 == 0) // every 16 hex pairs 
        System.out.println(); 
      } 
      if (i < text.length()) 
       System.out.print(text.substring(i, i + 2) + " "); 
      else 
       System.out.print("41 "); 
     } 
    } 
} 
+0

Я понимаю, что вы имеете в виду. Спасибо за совет! действительно полезно –

+0

Как я могу изменить его, чтобы он мог взять строку сразу, а не просить четыре отдельные строки? Выход правильный. Просто не знаете, как я буду менять основные –