Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一个字符串中打包2个长值并将其取回_Java_String_Hash_Encoding - Fatal编程技术网

Java 如何在一个字符串中打包2个长值并将其取回

Java 如何在一个字符串中打包2个长值并将其取回,java,string,hash,encoding,Java,String,Hash,Encoding,请帮助我了解一些想法,我如何在Java中做到这一点: 输入: long id1 = 123456 (any long value) long id2 = 4490390904 (any long value) 输出: a94dhjfh4990-d49044 (whatever, any string) 然后,根据输出返回id1和id2。所以,某种重唱,散列。不是很明显(比如123456###4490390904),但我也不想要加密级别… 只是想知道Java库(所以没有第三方库)或一些算法(代

请帮助我了解一些想法,我如何在Java中做到这一点:

输入:

long id1 = 123456 (any long value)
long id2 = 4490390904 (any long value)
输出:

a94dhjfh4990-d49044 (whatever, any string)
然后,根据输出返回
id1
id2
。所以,某种重唱,散列。不是很明显(比如123456###4490390904),但我也不想要加密级别…
只是想知道Java库(所以没有第三方库)或一些算法(代码片段)是否已经提供了一些我可以使用的东西

更新
类似于:

如果它只是任何字符串,那么您可以简单地执行以下操作:

Long a,b;
a=...; b=...;
//coding
String s = a + "#" + b;
//decoding
ab= a.split(s,'#');
System.out.println("a= " + Long.parsLong(ab[0]));
System.out.println("b= " + Long.parsLong(ab[1]));

同时,您可以使用SHA-1 explained对中间字符串进行编码,以便在黑暗中拍摄,因为您对要求不是很精确。以下提供了两个函数,用于对
字符串中的值进行编码,并将
字符串
解码为
数组。每个长值的格式为十六进制

public class IdEncoder {

    static final String sep = "-";

    public static String encode(long id1, long id2) {
        return Long.toHexString(id1)+sep+Long.toHexString(id2);
    }

    // Assume the paramater is at the right format.
    // Several exceptions can be thrown. Add exception handling as necessary...
    public static long[] decode(String id) {
        String[] ids = id.split(sep);
        long[] idl = new long[2];
        idl[0] = Long.parseUnsignedLong(ids[0], 16);
        idl[1] = Long.parseUnsignedLong(ids[1], 16);
        return idl;
    }

    public static void main(String[] args) {

        String ids = encode(123456, 675432187);
        System.out .println(ids);
        long[] idl = decode(ids);
        System.out .println(Arrays.toString(idl));
    }
}
印刷品

1e240-284246fb
[123456675432187]


这就是我想要的:


如果我的请求不够精确,很抱歉。

编码?还是散列?这些是不同的。这看起来更像是一个算法或调用api将所述数字放入字符串,然后调用算法或api撤消。使用哈希将无法返回输出。Base64编码?不确定..您可以简单地用分隔符连接每个long的十六进制值。那是不是太明显了?我想那不是他想要的。我想他想把Long转换成字符串,就像它们的值转换成asci一样。这里发生的不仅仅是Long到字符串的转换,他正在寻找编码或散列他的字符串。请注意他的输出与输入之间的差异。SHA-1是一个单向算法。他还希望能够逆转它,并得到他的原始号码回来,大概没有暴力强迫它。