我有以下逻辑来编码文本,但是当我尝试解码它时,我没有得到预期的结果:
private static String encodeText(String input) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
int d = (int) c;
d = d*2 + i;
builder.append((char)d);
}
return builder.reverse().toString();
}
这是我的解码逻辑,我只是试图颠倒编码逻辑来解码文本:
private static String decode(String input) {
StringBuilder b = new StringBuilder();
for (int i = input.length() - 1; i >= 0; i--) {
char c = input.charAt(i);
int data = (int)c;
data = data - i;
data = (data)/2;
b.append((char)data);
}
return b.toString();
}
如果我对文字hello
进行编码,则编码值为âÛÚËÐ
,当我尝试对其进行解码时,我会将其设为fdlmq
这个逻辑中的问题在哪里,你能帮助我吗?
答案 0 :(得分:4)
由于在对字符进行编码后,您将反转字符串
return builder.reverse().toString();
您需要将您减去的整数更改为
data = data - (size - i - 1);
其中size
是字符串的长度(input.length()
)
答案 1 :(得分:2)
你需要在decode
开始时再次反转字符串,因为你在encodeText()
中将其反转,然后在结束时再次反转,因为你从最后开始构建字符串。
private static String decode(String input) {
StringBuilder b = new StringBuilder();
input = new StringBuilder(input).reverse().toString();
for (int i = input.length() - 1; i >= 0; i--) {
char c = input.charAt(i);
int data = (int)c;
data = data - i;
data = (data)/2;
b.append((char)data);
}
return b.reverse().toString();
}
答案 2 :(得分:0)
所以你已经&#34;嗨&#34; 你做h * 2 + 0 = x,而i * 2 + 1 = y 现在你逆转它并且有#34; yx&#34;。
现在你解码&#34; yx&#34; 你做x-1,......
问题是,您使用+0编码x,而不是-1。不应该在这里使用我,但input.length() - 1 - i。
答案 3 :(得分:0)
这是因为我在两种方法上有所不同。 将解码逻辑更改为以下内容。
private static String decode(String input)
{
StringBuilder b = new StringBuilder();
for (int i = input.length() - 1; i >= 0; i--)
{
char c = input.charAt(i);
int data = (int) c;
data = data - (input.length()-1-i);
data = (data) / 2;
b.append((char) data);
}
return b.toString();
}
答案 4 :(得分:0)
你的解码方法中存在错误数据= data - (input.length() - i);
试试这个
this.platform.ready().then(() => {
this.base64ToGallery.base64ToGallery(base64Image,options)
.then(
res => {
console.log('Saved image to gallery ', res);
this.navCtrl.pop();
},
err => { //For ios i am getting as `plugin_not_installed`
console.log('Error saving image to gallery ', err);
this.navCtrl.pop()
});
})