-2

我正在开发一个项目,我已经对其他项目的代码进行了逆向工程。但是,代码包含这么多的goto语句和一个label与它。

我试图根据使用的标签重新排列代码,但没有得到正确的输出。我知道这可能超出了你们的范围,因为你们不知道代码。

我的查询是关于如何在 Android 中使用带标签的语句,因为我找不到任何特定的代码或演示示例。

下面是我正在处理的代码的代码片段。

    public static String computeIMEI()
{
    String s1 = ((TelephonyManager)getInstance().getSystemService("phone")).getDeviceId();
    if (s1 != null) goto _L2; else goto _L1
 _L1:
    String s = "not available";
 _L4:
    Log.d("IMEI", (new StringBuilder()).append("got deviceID='").append(s).append("'").toString());
    return s;
 _L2:
    s = s1;
    if (s1.equals("000000000000000"))
    {
        s = "1971b8df0a9dccfd";
    }
    if (true) goto _L4; else goto _L3
_L3:
}

非常感谢您的小帮助,谢谢。

4

1 回答 1

1

我的天啊!你在哪里得到它?:)
通常没有人使用goto语句。代码很难阅读和理解。

if (s1 != null) goto _L2; else goto _L1很明显。如果 s1 等于 null,我们转到 _L1 标签,然后转到 _L4 并从方法返回。

如果 s1 不等于 null,我们转到 _L2 标签,然后再次转到 _L4(if (true) goto _L4; else goto _L3否则永远不会执行分支)并从方法返回。

您的“翻译”形式的代码:

public static String computeIMEI() {
    String s1 = ((TelephonyManager)getInstance().getSystemService("phone")).getDeviceId();
    if (s1 != null) {
        s = s1;
        if (s1.equals("000000000000000")) {
            s = "1971b8df0a9dccfd";
        }
    } else {
        String s = "not available";
    }

    Log.d("IMEI", (new StringBuilder()).append("got deviceID='").append(s).append("'").toString());
    return s;
}
于 2015-07-08T07:23:13.767 回答