導航:首頁 > 編程大全 > 將資料庫的二進制轉換為字元串

將資料庫的二進制轉換為字元串

發布時間:2023-10-09 10:07:57

『壹』 Base64演算法原理及實現

Base64演算法最開猛歷始是被用於解決電子郵件數據傳輸問題。在早期,由於歷史原因問題,電子郵件只允許使用ASCII字元,如果在郵件中出現了非ASCII字元,在通過某些網關進行數據轉發的時候,網關會對這些非ASCII字元做出調整,例如,把ASCII碼8位二進制碼的最高位置為0。此時接收方在收到郵件時就會出現亂碼。基於這個原因,產生了Base64演算法。

Base64編碼的思路說白了,就是把傳輸數據的每個位元組映射成ASCII碼表中的某些字元,這樣在傳輸的過程中,就不會出現亂碼的問題了。Base64演算法定義了一個映射表,如下所示。

由上表可以看出,之所以稱為Base64編碼,實際上是把原數據映射成了ASCII碼表中的64個字元。但是,64個字元最多能映射的位數是6bit。但是每個數據是8bit的,那怎麼轉換呢?Base64編碼的基本思想: 將原數據每3個位元組(24bit)分為一組,然後將這24bit數據按照每6bit一組,重新劃分為4組,分組完成之後,再將每每6bit數據為單元進行映射。
Base64編碼的基本流程如下:

例如,將字元串前世"ABC"進行Base64編碼流程如下。

所以,字元串"ABC"經過Base64編碼後的數據是"QUJD"。

從Base64編碼的原理可以看到,Base64實際上就是把原來數據中的每3個位元組一組進行Base64編碼轉換,編碼之後變成4個Base64字元。但是如果原文數據長度不是3的整數倍的時候該怎麼辦呢?Base64演算法規定,如果待加密數據不是3的整數倍,就在原文數據後面補0,直到長度湊夠3的整數倍為止,然後再進行Base64編碼轉換。待編碼轉換完成之後,在結果末尾補充相同個數的"="。
例如,將字元串"ABCD"進行Base64編碼流程如下。

所以,字元串"ABC"經過Base64編碼後的字元串是"QUJDRA=="。

其實這里有個規律,當原文的數據長度除以3餘數為0時,編碼之後後面沒有"=";當余數為1時,後面有兩個"=",當余數是2時,後面有一個"=","="的個數也就是補充的位元組數。

通過Base64的原理可以看到,Base64編碼實際上是把原數據的3個位元組映射成了4個位元組,所以相比於原數據長度,編碼後的長度會增加1/3。這也會降低傳輸效率。

Get方式和Post方式是Http請求常用的兩種方式,某些情況下會要求使用Get方式來傳遞二進制數據。這時,可以先通過Base64編碼來將二進制數據轉換成字元串數據。由於符號"+"和符號"/"是不允許出現在Url中的,所以,產生了Url安全的Base64演算法,所謂的Url安全的Base64演算法,其實主要包含兩個方面。

目前,在java中,我們可以通過以下方式來是使用Base64演算法。

在java8之前,JDK官方庫中都沒有內置Base64演算法,其實Base64實現很簡單,這個不知道為什麼。但是Java8內置了Base64編碼器和解碼器。
在Java8中,Base64工具類提供了三種BASE64編解碼器:
1.基本Base64編碼
也就是完全按照標准Base64的映射規則來編解碼,不添加任何行標。

2.Url Base64編碼
JDK標准類庫中的Url Base64編碼是用"-"和"_"取代了"+"和"/"

3.MIME Base64編碼
Java類庫中還提供了一種格式更友好的Base64編碼,這種編碼輸出每行不超過76字元,並且使用' '並跟隨' '作為分割。

4.去除填充符的Base64
在Java標准類庫中,還提供了一種方式來去除編碼末尾的"=",就是在構建Encoder 對象後調用withoutPadding()方法,例如:

Commons Codec是Apache為Java開發者提供的一個開源軟體類庫,該類庫中主要是一些常用的編碼工具類包,例如DES、SHA1、MD5、Base64,URL等。在使用該類庫之前需要首先在Eclipse中添加依賴。Commons Codec提供了以下Base64編碼方式。
1.基本Base64編碼
Commons Codec和Java標准類庫提枝悔搜供給的Base64編碼方式是一樣的。

2.Url Base64編碼
Url Base64編碼和Java類庫也是一樣的,把"+"和"/"替換成了"-"和"_",有一個不同的地方是Commons Codec中的Url Base64默認去掉了後面的"=",相當於Java類庫中調用了withouPadding方法,例如:

3.類MIME格式輸出
Commons Codec中也提供了類似於Java類庫中的MIME的格式化輸出,在Commons Codec中有一個方法:

這里的isChunked置為true,就表示是按照MIME格式輸出編碼結果。

h

『貳』 怎樣將二進制數據轉換字元串

1、在VB中沒有一種所謂的「真正的二進制」,只有long、integer、byte這樣的整數。 2、VB中不支持二進制字元串。只支持16進制字元串,需要在前面加前綴"&H"。 比如:CLng("&HFFFF") 3、如果你想將"1010011101"這樣的二進制字元串轉換為數值,需要自己寫一個函數。 下面是我給你寫的一個: Function BinaryValue(ByVal strBin As String) As Long Dim lngOutValue As Long Dim bytBytes() As Byte Dim bytAscii(0 To 255) As Byte Dim lngBytes_Start As Long Dim lngBytes_Length As Long Dim lngBytes_Index As Long bytAscii(49) = 1 bytBytes() = StrConv(strBin, vbFromUnicode) lngBytes_Length = UBound(bytBytes) If lngBytes_Length > 30 Then lngBytes_Start = lngBytes_Length - 30 For lngBytes_Index = lngBytes_Start To lngBytes_Length lngOutValue = lngOutValue + bytAscii(bytBytes(lngBytes_Index)) * 2 ^ (lngBytes_Length - lngBytes_Index) Next BinaryValue = lngOutValue End Function BinaryValue函數可以將31位以下的二進制字元串轉換為Long類型整數。 比如下面的用法: MsgBox (BinaryValue(""))

『叄』 java 如何將二進制數據流轉換成字元串並保存

private static String bytesToString(String filename) {
String myreadline = "";
try {
// 創建FileReader對象,用來讀取字元流
FileReader fr = new FileReader("userinfo.txt");
// 緩沖指定文件的輸入
BufferedReader br = new BufferedReader(fr);
// 定義一個String類型的變數,用來每次讀取一行

while (br.ready()) {
// 讀取一行
myreadline = myreadline + (myreadline.equals("")?"":"\n") + br.readLine();

// 在屏幕上輸出
System.out.println(myreadline);
}
br.close();
fr.close();

} catch (IOException e) {
e.printStackTrace();
}
return myreadline;
}

public static void writerFile(String fileString, String filePath) {
FileWriter fw;
try {
fw = new FileWriter(filePath);
// 將緩沖對文件的輸出
BufferedWriter bw = new BufferedWriter(fw);
bw.write(fileString);
bw.flush();
bw.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static void main(String[] args) throws FileNotFoundException,
Exception {
// TODO Auto-generated method stub
String fileString = bytesToString("D:/workspace/TestStruts2/userinfo.txt");
writerFile(fileString,"D:/workspace/TestStruts2/test.txt");
}

『肆』 如何將一個二進制文件轉化為字元串

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/*
* String(byte[] bytes, String charsetName):通過指定的字元集解碼位元組數組
* byte[] getBytes(String charsetName):使用指定的字元集合把字元串編碼為位元組數組
*
* 編碼:把看得懂的變成看不懂的
* String -- byte[]
*
* 解碼:把看不懂的變成看得懂的
* byte[] -- String
*
* 舉例:諜戰片(發電報,接電報)
*
* 碼表:小本子
* 字元 數值
*
* 要發送一段文字:
* 今天晚上在老地方見
*
* 發送端:今 -- 數值 -- 二進制 -- 發出去
* 接收端:接收 -- 二進制 -- 十進制 -- 數值 -- 字元 -- 今
*
* 今天晚上在老地方見
*
* 編碼問題簡單,只要編碼解碼的格式是一致的。
*/
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "你好";

// String -- byte[]
byte[] bys = s.getBytes(); // [-60, -29, -70, -61]
// byte[] bys = s.getBytes("GBK");// [-60, -29, -70, -61]
// byte[] bys = s.getBytes("UTF-8");// [-28, -67, -96, -27, -91, -67]
System.out.println(Arrays.toString(bys));

// byte[] -- String
String ss = new String(bys); // 你好
// String ss = new String(bys, "GBK"); // 你好
// String ss = new String(bys, "UTF-8"); // ???
System.out.println(ss);
}
}

『伍』 二進制流怎麼轉化成字元串delphi

ObjectBinaryToText過程將二進制流中存儲的部件轉化為基於文本的表現形式,這樣 ... 可以用文本編輯器進行查找和替代操作,最後可以將文本再轉化成二進制流中的部件。 ... 寫入屬性名ConvertValue過程根據屬性的類型將屬性值轉化為字元串,然後寫入流中。

閱讀全文

與將資料庫的二進制轉換為字元串相關的資料

熱點內容
如何利用編程做多文件數據合並 瀏覽:666
java如何用tcp發送16進制協議 瀏覽:975
js獲取當天 瀏覽:637
在什麼網站看戰狼2 瀏覽:881
win7桌面工具欄不見了 瀏覽:346
qq群幾個管理員 瀏覽:598
錄光碟怎麼找不到文件 瀏覽:885
flip5怎麼連app 瀏覽:273
五個g的文件怎麼傳到u盤 瀏覽:316
如何用編程編譯運行出心形圖案 瀏覽:486
linuxcentos64vpn 瀏覽:328
桔城pdf轉換成word轉換器 瀏覽:754
java數組排重 瀏覽:846
1703版win10 瀏覽:357
windows文件上傳 瀏覽:111
精通jsp編程技術 瀏覽:139
電腦軟體刪不了提示找不到文件 瀏覽:223
寧波哪裡有學It編程的地方 瀏覽:808
win10最新預覽版續航 瀏覽:705
web伺服器更新代碼 瀏覽:603

友情鏈接