От случайных целых чисел до реальной строки - PullRequest
0 голосов
/ 29 сентября 2011

Это код, который принимает массив всех символов печати таблицы ASCII.Я пытаюсь сделать так, чтобы любое сообщение String в форме целых чисел (например, String "aba", которое преобразуется в 97098097, могло быть возвращено в его первоначальную форму String. 100101101 может быть принято и преобразовано в "dee". I 'Мы очень старались с этим методом, но он, кажется, не работает, особенно когда дело доходит до цифр и тому подобное, пожалуйста, помогите мне. Кстати, это на Java, и я использую Eclipse.

public static String IntToString (){


int n = 0;
String message = "";
String message2 = null;
String [] ASCII = {" ","!","\"","#","$","%","&","\'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"};
String IntMessage = result.toString();
String firstChar = IntMessage.substring(0,2);
if (IntMessage.substring(0,1)=="1" && IntMessage.length()%3==0)
{
    for (int x = (IntMessage.length() % 3 - 3) % 3; x < IntMessage.length()-2; x += 3)
        n = Integer.parseInt(IntMessage.substring(Math.max(x, 0), x + 3));
        message=message.concat(ASCII[n-31]);
return message;
}
else if (IntMessage.length()%3==2)
message2=ASCII[(Integer.parseInt(firstChar))-31];
        for (int x = 2; x < IntMessage.length()-2; x += 3)
            n = Integer.parseInt(IntMessage.substring(x, x + 3));
            message=message2+=ASCII [n - 31];
return message;

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Казалось бы, ваша схема кодирования ненормальная.

Сначала вы берете значение ASCII строки, затем принимаете символьное представление этого значения ASCII, а затем сохраняете его как строку.

Итак "abc" => {97, 98, 99} => "979899".

Но так как вы используете ASCII, который может иметь значения 100 или более, вы заполняете свои int 0, если они меньше 100:

"abc" => {97, 98, 99} => {"097", "098", "099"} => "097098099"

Но вы решаете делать это только иногда, потому что как-то

"aba" => "97098097"

То есть первый «а» превращается в «97», а последний «а» превращается в «097».

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

Кроме того, мы надеемся, что это не "случайные целые числа", потому что вы пытаетесь превратить их в разумные строки. В противном случае простое отображение, такое как base64, легко сопоставит любые целые числа со строками, они просто не будут иметь большого смысла.

На самом деле, они даже не являются целыми числами. Вы храните свои закодированные строки как строки.

0 голосов
/ 29 сентября 2011
public static void main(String[] srgs){
    String aaa = "100101101";
    String[] a = split(aaa, 3);

    String s = "";

    for(int i=0;i<a.length;i++){
        char c = (char)Integer.parseInt(a[i]);
        s += Character.toString(c);
    }
    System.out.println(s);
}

public static String[] split(String str, int groupIndex){
    int strLength = str.length();
    int arrayLength = strLength/groupIndex;
    String[] splitedArray = new String[strLength/groupIndex];

    for(int i=0;i<arrayLength;i++){
        String splitedStr = str.substring(0, groupIndex);
        str = str.substring(groupIndex, str.length());
        arrayLength = str.length();
        splitedArray[i] = splitedStr;
    }
    return splitedArray;
}

Наиболее важным является то, что строка ASCII преобразуется в значение Char, а не в реальное значение символа в строке.В этом случае может быть полезна длина кода ASCII, равная 3.

...