+-
如何在Java中解码logonHours属性
我正在尝试从Active Directory解码logonHours属性,以使其正确显示在 Java应用程序中.当我查看属性编辑器时,它看起来像这样:

logonHours 03 00 00 00 F0 FF 1F F0 FF 1F F0 FF 1F F0 FF 1F F0 FF 1F 00 FF

这恰好是21字节长,这正是我所期望的(每天以3字节编码,每天总共24位).这是为了与我的logonHours下的显示匹配.但是,我的编码如下(每​​天的位字符串)

Sun:     00000000 (00) 00000000 (00) 00000000 (00)
Mon-Fri: 00001111 (0F) 11111111 (FF) 11111000 (F8)
Sat:     00000000 (00) 11111111 (FF) 11000000 (C0)

这使我认为logonHours属性和显示之间发生了一些编码.我看过Perl代码和VBScript-在Java中转换这两种代码都会进行直接转换,这与实际情况不符.

是否有人拥有Java,C#.NET或其他伪代码来正确解码logonHours属性?

最佳答案
当我举起双手并寻求帮助十分钟后,我想出这些东西时,我讨厌它.关键在此页中: Active Directory Permitted Logon Times with C# .Net 3.5 using System.DirectoryServices.AccountManagement-具体来说,位的排序以及数组以1比1的问题开头的事实.这是我想出的Java代码:

private String[] decodeLogonHours(Attribute attr)
{
    byte[] raw = attr.getValueByteArray();
    String[] days = new String[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
    ArrayList<String> ret = new ArrayList<String>();

    for (int day = 0 ; day < days.length ; day++) {
        byte[] vBits;
        if (day == 6) {
            vBits = new byte[] { raw[19], raw[20], raw[0] };
        } else {
            vBits = new byte[] { raw[day*3+1], raw[day*3+2], raw[day*3+3] };
        }

        StringBuffer sb = new StringBuffer();
        sb.append(String.format("%s:", days[day]));
        for (int b = 0 ; b < 3 ; b++) {
            sb.append(" ");
            sb.append(decodeLogonBits(vBits[b]));
        }
        ret.add(sb.toString());
    }

    String[] r = new String[ret.size()];
    ret.toArray(r);
    return r;
}

private String decodeLogonBits(byte b) {
    StringBuffer sb = new StringBuffer();
    sb.append((b & 0x01) > 0 ? "1" : "0");
    sb.append((b & 0x02) > 0 ? "1" : "0");
    sb.append((b & 0x04) > 0 ? "1" : "0");
    sb.append((b & 0x08) > 0 ? "1" : "0");
    sb.append((b & 0x10) > 0 ? "1" : "0");
    sb.append((b & 0x20) > 0 ? "1" : "0");
    sb.append((b & 0x40) > 0 ? "1" : "0");
    sb.append((b & 0x80) > 0 ? "1" : "0");
    return sb.toString();
}
点击查看更多相关文章

转载注明原文:如何在Java中解码logonHours属性 - 乐贴网