在工控應用上,傳回的資料經常會以二進制的形成存儲,而這些二進制資料又是以每4個bit表示一個十六進制的資料内容。
解析的時候,往往是一個位元組(Byte)占用8個位(bit),高位4bit 表示一個十六進制資料,低位4bit 表示一個十六進制資料。
問題描述:在SQL Server 資料庫中,如何實作二進制資料與字元串資料之間的直接轉換?
一定會有人立馬反問我:為什麼不在程式中使用 C# 或者 JAVA 或者 C++ 來處理這個業務呢?
我的回答是:這個我知道,也已經實作了。但在一些特殊的應用環境和業務需求面前(如:對資料的統計、對資料的分析),我必須這麼做!
SQL Server 資料庫中,實作 varbinary 類型轉換成 varchar 類型
這個已經有人實作了,并且處理得相當巧妙。實作的思路是:
每次取得 varbinary 中一個位元組的資料,然後除以16 獲得高位的4bit資料,再模16獲得低位的4bit資料;
分别從固定字元串中以下标的形式比對對應的字元,最後累加起來即可。
代碼如下:


測試示例:
SQL Server 資料庫中,實作 varchar 類型轉換成 varbinary 類型
一定會有人立馬就說:既然已經實作了varbinary 類型轉換成 varchar 類型,你需要做的,隻是将函數逆向反轉實作便可。
如果真是這麼簡單,估計網上早就應該有了。但結果是:網上找不到(至少我沒有找到),實作也并非如此!
隻能自己動手,豐衣足食了。實作的思路是:
先将整個字元串按照每兩位分組;
為什麼不按照每8位或每4位進行分組?是為了考慮到函數的通用性。
如果按照每 8位 或者 每4位 分組,則整個字元串必須是8或者4的倍數,否則将出現字元不足,前面補 0的情況。
然後對每個字元進行處理,如:字元“A B C D E F” 對應轉換為“10 11 12 13 14 15”;
接着對每2個字元進行 16 的幂運算,并求和。如: AB = 10 * 16的一次方 + 11 * 16的零次方;
再将這個2個字元的整數和,轉換為一個位元組(Byte)長度的 varbinary 資料;
最後将所有的 varbinary 資料直接相加即可。

