SQL> set serverout on
SQL> exec dbms_output.put_line( dbms_transaction.local_transaction_id);
3.4.50081
PL/SQL procedure successfully completed.
SQL> select xidusn, xidslot, xidsqn, xid from v$transaction ;
XIDUSN XIDSLOT XIDSQN XID
---------- ---------- ---------- ----------------
3 4 50081 03000400A1C30000
SQL> select xidusn, xidslot, xidsqn, xid ,
2 to_char( xidusn, 'fmXXXXX') x1,
3 to_char( xidslot, 'fmXXXXX') x2,
4 to_char( xidsqn, 'fmXXXXX') x3
5 from v$transaction ;
XIDUSN XIDSLOT XIDSQN XID X1 X2 X3
---------- ---------- ---------- ---------------- ------ ------ ------
3 4 50081 03000400A1C30000 3 4 C3A1
SQL>
SQL> select to_number('C3A1','XXXX') from dual;
TO_NUMBER('C3A1','XXXX')
------------------------
50081
It all matches up when you remember about endian format and byte swapping.
Hence "A1C30000" can be read as 00,00,C3,A1