我正在尝试模仿Oracle 12c中的C#函数Encoding.ASCII.GetBytes。我快到了,但不明白为什么我会得到以下结果:
Oracle
declare
l_string varchar2(4000) := 'Test';
begin
dbms_output.put_line(utl_raw.cast_to_raw(l_string));
end;
其输出为:
54657374
C#
internal static string ConvertTest()
{
var inputString = "Test";
Console.WriteLine(BitConverter.ToString(Encoding.ASCII.GetBytes(inputString)));
}
其输出为:
54-65-73-74
所以我似乎快到了,但我不明白为什么C#在每个字节之间都有"-",而Oracle没有。
是否有一个Oracle函数来复制C#的输出?
谢谢。
utl_raw.cast_to_raw不会在每个字符的字节码之间放入'-'。我认为没有一种直接的方法可以获得预期格式的一系列字节码。
一种解决方法是,循环遍历每个字符,并在每次迭代后附加"-"。
样本代码-
declare
l_string varchar2(4000) := 'Test';
l_result varchar2(4000) := '';
begin
for idx in 1 .. length(l_string)
loop
l_result := l_result || utl_raw.cast_to_raw(SUBSTR(l_string,idx,1));
if idx != length(l_string) then
l_result := l_result || '-';
end if;
end loop;
dbms_output.put_line(l_result);
end;
我想我追错东西了!
utl_raw.cast_to_raw相当于Encoding.ASCII.GetBytes((。实际上是BitConverter.ToString在每个字节之间插入"-"。
谢谢你的帮助!