菜鸟教程小白 发表于 2022-12-12 23:55:33

java - 将 Java 转换为 Objective-c(Android 到 iOS)


                                            <p><p><strong>编辑:这是转换后代码的更正版本</strong></p>

<pre><code>int scrambBase20[] = {1,2,3};
- (NSString *) descramble:(NSString*) input{
    char *ret = ;
    int offset = -(sizeof scrambBase20);
    for(int i=0;i&lt;;i++){
      if(i%(sizeof scrambBase20)==0){
            offset+=(sizeof scrambBase20);
      }
      ret+offset] = (char) ((Byte) ^0x45);
    }
    NSString *realRet = [ initWithUTF8String:ret];
    ];

    return realRet;
}
</code></pre>

<p>我有这个 Javablock ,我正在尝试将其转换为 Objective-C。</p>

<p>我有一个要解密的加密字符串。</p>

<pre><code>;
</code></pre>

<p>应该变成</p>

<pre><code>&#34;testcode&#34; (without quotes)
</code></pre>

<p>相反,我得到了输出</p>

<pre><code>&#34;6&amp;sec *ee 1ee1eee!&#34; (without quotes)
</code></pre>

<p>以下代码是我的 Java 代码 [作品]</p>

<pre><code>String descramble(String input){
    Log.i(&#34;APP&#34;, &#34;input length: &#34; + input.length());
    char[] ret; //= new ArrayList&lt;Character&gt;();
    ret = input.toCharArray();
    int offset = -scrambBase20.length;
    for(int i=0;i&lt;input.length();i++){
      if(i%scrambBase20.length==0)
            offset+=scrambBase20.length;
      ret+offset]=(char) ((byte) (input.charAt(i))^0x45);
    }

    String realRet = &#34;&#34;;
    for (char x : ret){
      realRet+=x;
    }
    realRet = realRet.trim();
    return realRet;
}
</code></pre>

<p>以下代码是我转换成 Xcode 的代码[不起作用]</p>

<pre><code>- (NSString *) descramble:(NSString*) input{
   char *ret = ;
   int offset = -(sizeof scrambBase20);
   for(int i=0;i&lt;(sizeof input);i++){
      if(i%(sizeof scrambBase20)==0){
            offset+=(sizeof scrambBase20);
      }
      ret+offset] = (char) ((Byte) ^0x45);
    }
    NSString *realRet = [ initWithUTF8String:ret];
    ];
    return realRet;
}
</code></pre>

<p>在从 Java 到 Objective-C 的转换中,有人看到错误吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>由于 <code>scrambBase20</code> 是一个数组,因此您需要使用 <code>count</code> 而不是 <code>sizeOf</code>。 Objective C 等价于 Java 中的 <code>sizeOf()</code> 是 <code>count</code>。</p>

<pre><code>- (NSString *) descramble:(NSString*) input{
   char *ret = ;
   int offset = (-1 * );
   for(int i=0;i&lt;;i++){
      if(i% == 0){
            offset+= ;
      }
      ret+offset] = (char) ((Byte) ^0x45);
    }
    NSString *realRet = [ initWithUTF8String:ret];
    ];
    return realRet;
}
</code></pre>

<p>对于一个<code>NSString</code>,java中的<code>length()</code>等价于objective c是<code></code>。对于<code>cString</code>,它是<code>strlen()</code>。</p>

<p><strong>更新:</strong></p>

<p>根据您的编辑,它是 C 数组而不是 NSArray。在这种情况下你需要使用,</p>

<pre><code>- (NSString *) descramble:(NSString*) input{
    char *ret = ;
    int offset = -1 * ((sizeof scrambBase20) / (sizeof int));
    for(int i=0;i &lt; ;i++){
      if(i%((sizeof scrambBase20) / (sizeof int))==0){
            offset+=((sizeof scrambBase20) / (sizeof int));
      }
      ret+offset] = (char) ((Byte) ^0x45);
    }
    NSString *realRet = [ initWithUTF8String:ret];
    ];

    return realRet;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于java - 将 Java 转换为 Objective-c(Android 到 iOS),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/13794347/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/13794347/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: java - 将 Java 转换为 Objective-c(Android 到 iOS)