從 ORACLE的RAWTOHEX到C#的RAWTOHEX

來源:互聯網
上載者:User

我們先瞭解一下基本知識:

     我們知道Oracle中有函數RAWTOHEX(rawvalue),將RAW類數值轉換成一個相應的16進位表示的字串,rawvalue中的每個位元組都被轉換成為一個雙位元組的字串。當我們給資料表中的ID定義成RAW(16)類型時,用RAWTOHEX(ID)得到的將是一個用16進位表示的字串,該字串的長度是32。同理RAW(8)得到的應該是一個長度為16的字串。

ORACLE中有一個SYS_GUID()函數,返回的是唯一的16進位表示的字串,長度也是32.因此我們可以給RAW(16)類型的ID設定預設值為:SYS_GUID(),但不能給位元組數小於16的RAW類型設定SYS_GUID(),會提示長度超出範圍。

 

接下來就是我遇到的問題了,通常我們在PL/SQL中寫查詢語句時都這麼寫:select ID from test,看到的ID顯示為已經被RAWTOHEX過的資料,比如:A03BDB52E4800D74E044001321BD1C8B,但我們在C#中查詢ORACLE資料庫時,會將RAW(16)類型的ID返回為一個 byte[]數組,長度為16.這和我們在PL/SQL中看到的ID是不一樣的。有時候在調試代碼時想看看這個ID是不是我們想要的ID時很不方便。因此我們有必要吧這個數群組轉換成和PL/SQL中一樣的資料顯示。

我們上面已經瞭解到這個byte[]數組中的每一個byte都被轉換成了一個雙位元組的字串,我們在C#中也定義一個RAWTOHEX函數,如下: static string RAWTOHEX(byte[] b)<br /> {<br /> StringBuilder sb = new StringBuilder();<br /> foreach (byte by in b)<br /> {<br /> string s = Convert.ToString(by, 16);//將位元組轉換成對應的字元<br /> if (s.Length==1)<br /> {<br /> s = "0" + s;//當字元不足兩位時,在前面補0,補足兩位字元,因為字串“01”轉換成的位元組為1,而將位元組再轉換成字串的時候就變成了“1”,因此要補0<br /> }<br /> sb.Append(s);<br /> }<br /> return sb.ToString().ToUpper();<br /> } ,同理,我們也可以定義一個HEXTORAW將16進位表示的字串轉換成byte[]數組方便插入資料庫。

static byte[] HEXTORAW(string str)<br /> {<br /> if (str.Length % 2 == 0)<br /> {<br /> byte[] b = new byte[str.Length / 2];<br /> int j = 0;<br /> for (int i = 0; i < str.Length; i += 2)<br /> {<br /> byte by = Convert.ToByte(str.Substring(i, 2), 16);//取兩個字元,轉換成對應的位元組<br /> b[j] = by;<br /> j++;<br /> }<br /> return b;<br /> }<br /> else<br /> {<br /> throw new Exception("不能將該字串轉換成RAW類型");<br /> }<br /> }

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.