[英]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_RAW
和HEXTORAW
,然后轉換十六進制。 值轉換為整數並添加“ 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.