【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例

简介: 【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。

在计算机领域,字符串的编解码是一项常见且重要的操作。Base64 编码是一种将二进制数据编码为可打印字符的方法,它在数据传输、存储和加密等方面有着广泛的应用。本文将介绍字符串 base64 编解码在多种语言中的实现方式,分为以下三个部分。

一、Base64 编码原理概述

Base64 编码的原理是将每 3 个字节(24 位)的数据转换为 4 个字节(32 位)的可打印字符。具体来说,它通过将 6 位一组的二进制数据映射到特定的字符集中来实现编码。在编码过程中,会使用“=”作为填充字符,以确保编码结果的长度是 4 的倍数。

二、Base64 编解码在不同语言中的实现

  1. Java

在 Java 中,可以使用java.util.Base64类来实现 base64 编码和解码。以下是一个简单的示例代码:

import java.util.Base64;

public class Base64EncodingDecodingExample {
   
    public static void main(String[] args) {
   
        String originalString = "Hello, World!";

        // 编码
        String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes());
        System.out.println("Encoded String: " + encodedString);

        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        System.out.println("Decoded String: " + decodedString);
    }
}
  1. Python

在 Python 中,可以使用base64模块来实现 base64 编码和解码。以下是一个示例代码:

import base64

original_string = "Hello, World!"

# 编码
encoded_string = base64.b64encode(original_string.encode()).decode()
print("Encoded String: " + encoded_string)

# 解码
decoded_string = base64.b64decode(encoded_string).decode()
print("Decoded String: " + decoded_string)
  1. C++

在 C++中,可以使用标准库中的std::string和一些自定义函数来实现 base64 编码和解码。以下是一个示例代码:

#include <iostream>
#include <string>
#include <vector>

std::string base64Encode(const std::string& input) {
    std::string encoded;
    int val = 0;
    int bits = -6;

    for (char c : input) {
        val = (val << 8) + c;
        bits += 8;

        while (bits >= 0) {
            encoded.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val >> bits) & 0x3F]);
            bits -= 6;
        }
    }

    if (bits > -6) {
        encoded.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val << 8) >> (bits + 8)) & 0x3F]);
    }

    while (encoded.size() % 4!= 0) {
        encoded.push_back('=');
    }

    return encoded;
}

std::string base64Decode(const std::string& encoded) {
    std::string decoded;
    int val = 0;
    int bits = -8;

    for (char c : encoded) {
        if (c == '=') {
            break;
        }

        val = (val << 6) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[c - 'A'];
        bits += 6;

        if (bits >= 0) {
            decoded.push_back(char((val >> bits) & 0xFF));
            bits -= 8;
        }
    }

    return decoded;
}

int main() {
    std::string originalString = "Hello, World!";

    // 编码
    std::string encodedString = base64Encode(originalString);
    std::cout << "Encoded String: " << encodedString << std::endl;

    // 解码
    std::string decodedString = base64Decode(encodedString);
    std::cout << "Decoded String: " << decodedString << std::endl;

    return 0;
}
  1. JavaScript

在 JavaScript 中,可以使用内置的btoa函数进行 base64 编码,使用atob函数进行 base64 解码。以下是一个示例代码:

const originalString = "Hello, World!";

// 编码
const encodedString = btoa(originalString);
console.log("Encoded String: " + encodedString);

// 解码
const decodedString = atob(encodedString);
console.log("Decoded String: " + decodedString);
  1. Go

在 Go 语言中,可以使用标准库中的encoding/base64包来实现 base64 编码和解码。以下是一个示例代码:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
   
    originalString := "Hello, World!"

    // 编码
    encodedString := base64.StdEncoding.EncodeToString([]byte(originalString))
    fmt.Println("Encoded String: " + encodedString)

    // 解码
    decodedBytes, _ := base64.StdEncoding.DecodeString(encodedString)
    decodedString := string(decodedBytes)
    fmt.Println("Decoded String: " + decodedString)
}

三、总结

通过以上介绍,我们可以看到 base64 编解码在不同语言中的实现方式各有特点。在实际应用中,我们可以根据具体的需求和语言环境选择合适的实现方法。同时,了解 base64 编解码的原理和实现细节,有助于我们更好地理解和处理数据的编码与解码问题,提高程序的性能和可靠性。

相关文章
|
2月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
879 103
|
7月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
219 7
|
7月前
|
存储 Go 索引
go语言中遍历字符串
go语言中遍历字符串
117 5
|
2月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
75 6
|
3月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
116 11
|
3月前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
6月前
|
Go
go语言for 遍历字符串
go语言for 遍历字符串
82 8
|
7月前
|
Go 索引
go语言遍历字符串
go语言遍历字符串
126 3
|
7月前
|
Java 程序员 开发工具
在比较Java和Python哪个更易学
在比较Java和Python哪个更易学
88 4
|
7月前
|
Java 程序员 Python
Java和Python
Java和Python
123 2