首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kokutou
V2EX  ›  问与答

求问这一小段 c 程序在 Java 里怎么写。。。

  •  
  •   kokutou · 2017-05-13 12:39:25 +08:00 · 915 次点击
    这是一个创建于 1017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是根据情况读取有 1 个、2 个、或者 3 个字节,做些操作,然后得到输出。
    这个输出的意义是个数组长度。

    这段是用 ida 静态分析一个 delphi 程序得到的 c 伪代码。。。
    为啥存个数组长度要存成这样了???
    还是说是某个算法,然后编译器优化成这样了?
    还是说是我想多了,这玩意就是恶心人防破解的?

    输入 0x3d,输出 0x7a
    输入 0x70 0x01,输出 0xe0
    输入 0x76 0xb8 0x21,输出 0x08 0x5c 0x6c

    #include <stdio.h>
    
    int main() {
        unsigned long long i = 0;
        unsigned long long out = 0;
    
        // read 1 bit to i;
        i = 0x76;
        out = i;
        if (i > 0x3f) {
            // read 1 bit to i;
            i = 0xb8;
            out += (i - 1) << 6;
            printf("%lld\n", (i - 1) << 6);
            if (i > 0x7f) {
                // read 1 bit to i;
                i = 0x21;
                out += (i - 1) << 13;
                printf("%lld\n", (i - 1) << 13);
            }
        }
    
        //output*2
        printf("%lld %llx", out * 2, out * 2);
    
        return 0;
    }
    

    下面是截图:

    1 回复  |  直到 2017-05-14 12:53:30 +08:00
    kokutou
        1
    kokutou   2017-05-14 12:53:30 +08:00
    java 没有 unsigned,这样搞一下就好了:

    ```
    private static int uByte(byte signedByte) {
    return ((int) signedByte) & 0xff;
    }

    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2784 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    ♥ Do have faith in what you're doing.