You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8实现GUID与Oracle RAW(16)字符串双向转换方法问询

Java 8 实现GUID与Oracle RAW(16)字符串互转

转换原理

GUID和Oracle RAW(16)的差异仅在于前三个分段的字节序:标准GUID的前三个分段采用小端字节序存储,转换为Oracle RAW格式时需要将每个分段的字节(每2个十六进制字符为1个字节)倒序排列,后两个分段保持大端字节序无需调整,最终拼接所有分段转为大写即可。

相关格式说明

  • 标准格式:A0824186-1E9C-AE47-95E1-1431542C2133
  • 带括号格式:{A0824186-1E9C-AE47-95E1-1431542C2133}
  • Oracle RAW(16)格式:864182A09C1E47AE95E11431542C2133
  • Oracle hextoraw用法:HEXTORAW('864182A09C1E47AE95E11431542C2133')
  • SQL Server使用Oracle字节序格式:0x864182A09C1E47AE95E11431542C2133

完整实现代码

public class GuidRawConverter {

    // 辅助方法:反转十六进制分段的字节顺序
    private static String reverseHexSegment(String segment) {
        StringBuilder sb = new StringBuilder();
        for (int i = segment.length() - 2; i >= 0; i -= 2) {
            sb.append(segment, i, i + 2);
        }
        return sb.toString();
    }

    /**
     * 标准GUID转换为Oracle RAW(16)字符串
     * @param guid 支持带横杠、带括号的任意大小写GUID格式
     * @return 大写的32位RAW格式字符串
     */
    public static String guidToOracleRaw(String guid) {
        // 清理输入,去除所有非十六进制字符
        String cleanGuid = guid.replaceAll("[^0-9a-fA-F]", "").toUpperCase();
        if (cleanGuid.length() != 32) {
            throw new IllegalArgumentException("无效的GUID格式,长度需为32位十六进制字符");
        }
        // 拆分GUID的五个分段
        String seg1 = cleanGuid.substring(0, 8);
        String seg2 = cleanGuid.substring(8, 12);
        String seg3 = cleanGuid.substring(12, 16);
        String seg4 = cleanGuid.substring(16, 20);
        String seg5 = cleanGuid.substring(20);
        // 反转前三个分段的字节顺序
        seg1 = reverseHexSegment(seg1);
        seg2 = reverseHexSegment(seg2);
        seg3 = reverseHexSegment(seg3);
        // 拼接得到RAW格式
        return seg1 + seg2 + seg3 + seg4 + seg5;
    }

    /**
     * Oracle RAW(16)字符串转换为标准GUID
     * @param raw 支持带0x前缀的任意大小写RAW格式
     * @return 小写的标准横杠分隔GUID
     */
    public static String oracleRawToGuid(String raw) {
        // 清理输入,去除所有非十六进制字符
        String cleanRaw = raw.replaceAll("[^0-9a-fA-F]", "").toUpperCase();
        if (cleanRaw.length() != 32) {
            throw new IllegalArgumentException("无效的RAW(16)格式,长度需为32位十六进制字符");
        }
        // 拆分RAW的五个分段,反转前三个分段恢复原字节序
        String seg1 = reverseHexSegment(cleanRaw.substring(0, 8));
        String seg2 = reverseHexSegment(cleanRaw.substring(8, 12));
        String seg3 = reverseHexSegment(cleanRaw.substring(12, 16));
        String seg4 = cleanRaw.substring(16, 20);
        String seg5 = cleanRaw.substring(20);
        // 拼接为标准GUID格式
        return String.join("-", seg1, seg2, seg3, seg4, seg5).toLowerCase();
    }

    // 测试示例
    public static void main(String[] args) {
        String standardGuid = "A0824186-1E9C-AE47-95E1-1431542C2133";
        // 正向转换
        String rawStr = guidToOracleRaw(standardGuid);
        System.out.println("GUID转RAW结果:" + rawStr);
        // 反向转换
        String revertGuid = oracleRawToGuid(rawStr);
        System.out.println("RAW转GUID结果:" + revertGuid);
    }
}

输出结果

GUID转RAW结果:864182A09C1E47AE95E11431542C2133
RAW转GUID结果:a0824186-1e9c-ae47-95e1-1431542c2133

内容的提问来源于stack exchange,提问作者mattsmith5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:06:00