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<;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>"testcode" (without quotes)
</code></pre>
<p>相反,我得到了输出</p>
<pre><code>"6&sec *ee 1ee1eee!" (without quotes)
</code></pre>
<p>以下代码是我的 Java 代码 [作品]</p>
<pre><code>String descramble(String input){
Log.i("APP", "input length: " + input.length());
char[] ret; //= new ArrayList<Character>();
ret = input.toCharArray();
int offset = -scrambBase20.length;
for(int i=0;i<input.length();i++){
if(i%scrambBase20.length==0)
offset+=scrambBase20.length;
ret+offset]=(char) ((byte) (input.charAt(i))^0x45);
}
String realRet = "";
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<(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<;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 < ;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]