【问题标题】:How to convert int array to base64 string in Java?如何在 Java 中将 int 数组转换为 base64 字符串?
【发布时间】:2017-05-18 23:07:00
【问题描述】:

如何转换这个数组:

int[] ints = { 233, 154, 24, 196, 40, 203, 56, 213, 242, 96, 133, 54, 120, 146, 46, 3 };

到这个字符串?

String base64Encoded = "6ZoYxCjLONXyYIU2eJIuAw==";

用法:

String base64Encoded  = ConvertToBase64(int[] ints);

(我问这个问题是因为 Java 中的 byte 已签名,但 C# 中的 byte 未签名)

【问题讨论】:

    标签: java base64 unsigned


    【解决方案1】:

    问题可以分解为 2 个简单的步骤: 1. 将 int 数组转换为 byte 数组。 2. 将字节数组编码为base4。

    这是一种方法:

    public static String convertToBase64(int[] ints) {
        ByteBuffer buf = ByteBuffer.allocate(ints.length);
        IntStream.of(ints).forEach(i -> buf.put((byte)i));
        return Base64.getEncoder().encodeToString(buf.array());
    }
    

    更老派的方法:

    public static String convertToBase64(int[] ints) {
        byte[] bytes = new byte[ints.length];
        for (int i = 0; i < ints.length; i++) {
            bytes[i] = (byte)ints[i];
        }
        return Base64.getEncoder().encodeToString(bytes);
    }
    

    View running code on Ideone.com

    【讨论】:

    • 请解释你的答案!
    • @shmosel:在您的示例中,int 不会转换为签名的byte 吗?这将产生一个不同的string。请看我的要求。
    • @JohnB 你没有发布任何要求,只是一个示例输入和输出,我的解决方案实现了。
    • @shmosel:您的代码将我的int 数组转换为签名的byte 数组。 (请参阅我在上面添加的评论) 我的 int 数组具有无符号值。您的代码将呈现与我在问题中指定的不同的 base64 string。你测试过这段代码吗?
    • @JohnB 有符号字节没有问题;字节总是用 Java 签名的。从intbyte 的缩小转换是否是对您的数据的正确解释取决于您的数据代表什么。由于您尚未指定,因此我进行了猜测并通过测试验证了结果。我想该轮到我问了:你测试过这段代码了吗?
    猜你喜欢
    • 2012-07-21
    • 2016-05-23
    • 2021-12-12
    • 2016-10-21
    • 2015-01-29
    • 2021-08-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多