簡體   English   中英

如何使用Oracle PL / SQL將字節轉換為ASCII字符

[英]How Do I convert bytes to ASCII chars, using Oracle PL/SQL

我將此字節轉換為ASCII字符時遇到問題,需要使用Oracle PL / SQL進行類似的轉換,原始的是在MS SQLserver中:

   /// </summary> 

/// <param name="blob"></param>

/// <returns></returns> 

[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, IsPrecise = true)] 

public static String VarbinaryToVarchar(SqlBytes blob) 
{ 
    if (blob.IsNull) return null; 

    byte[] buffer = blob.Buffer; 
    char[] res = new char[buffer.Length * 2]; 
    for (int i = 0; i < buffer.Length; i++) 
    { 
        res[i * 2] = (char)((buffer[i] & 0xF) + 65); 
        res[i * 2 + 1] = (char)(((buffer[i] >> 4) & 0xF) + 65); 
    } 
    return new String(res); 
} 

在此先感謝大家!

您可以探索結合使用Oracle內置UTL_RAWHEXTORAW ,然后轉換十六進制。 值轉換為整數並添加“ 65”。 之后, CHR將為您提供您期望的ASCII

 declare
   p_s_in varchar2(1000):= '0000EB862CB8024892CD419A26BB3AE';
   l_s_cmp varchar2(1000):= 'AAAALOGIMCILCAIEJNBEKJGCLIDLOK';
   l_s_out varchar2(1000) :='';
   p_pad binary_integer:=1;
   l_cur1 char;
   l_cur2 char;
   l_cur_bi1 binary_integer;
   l_cur_bi2 binary_integer;
 begin

   l_cur1 := substr(p_s_in, 1,1);
   l_cur2 := substr(p_s_in, 2, 1);
   while (length(l_cur1)=1)
   loop
     l_cur_bi1 := UTL_RAW.cast_to_binary_integer(HEXTORAW(l_cur1))+65;
     l_cur_bi2 := UTL_RAW.cast_to_binary_integer(HEXTORAW(l_cur2))+65;

     dbms_output.put_line(l_cur2||'->'||chr(l_cur_bi2)||'?>'||substr(l_s_cmp, 1,1));
     l_s_cmp := substr(l_s_cmp, 2);

     dbms_output.put_line(l_cur1||'->'||chr(l_cur_bi1)||'?>'||substr(l_s_cmp, 1,1));
     l_s_out:=l_s_out||chr(l_cur_bi2)||chr(l_cur_bi1);
     -- end loop
     p_s_in := substr(p_s_in, 3);
     l_s_cmp := substr(l_s_cmp, 2);
     l_cur1 := substr(p_s_in, 1, 1);
     l_cur2 := substr(p_s_in, 2, 1);
   end loop;
   dbms_output.put_line(l_s_out);
 end;
 /

我讓調試輸出,因為我不能完全確定這就是您想要的。 您給我們的輸出與我的代碼輸出略有不同: 在此處輸入圖片說明 ...您或我可能缺少一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM