[英]Converting Java to Objective-c (Android to iOS)
EDIT: this is the corrected version of the converted code 编辑:这是转换后的代码的更正的版本
int scrambBase20[] = {1,2,3};
- (NSString *) descramble:(NSString*) input{
char *ret = [input UTF8String];
int offset = -(sizeof scrambBase20);
for(int i=0;i<[input length];i++){
if(i%(sizeof scrambBase20)==0){
offset+=(sizeof scrambBase20);
}
ret[scrambBase20[i%(sizeof scrambBase20)]+offset] = (char) ((Byte) [input characterAtIndex:i]^0x45);
}
NSString *realRet = [[NSString alloc] initWithUTF8String:ret];
[realRet stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return realRet;
}
I have this block of Java which I am trying to convert to Objective-C. 我有这个Java块,我正在尝试将其转换为Objective-C。
I have an encrypted string which I am trying to decrypt. 我有一个要解密的加密字符串。
[descramble: @"6&eee *eee1ee1e eee!"];
Should become 应该成为
"testcode" (without quotes)
Instead, I get the output 相反,我得到了输出
"6&sec *ee 1ee1e ee!" (without quotes)
The following code is my Java code [works] 以下代码是我的Java代码[有效]
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[scrambBase20[i%scrambBase20.length]+offset]=(char) ((byte) (input.charAt(i))^0x45);
}
String realRet = "";
for (char x : ret){
realRet+=x;
}
realRet = realRet.trim();
return realRet;
}
The following code is my converted code to Xcode [doesn't work] 以下代码是我转换为Xcode的代码[无效]
- (NSString *) descramble:(NSString*) input{
char *ret = [input UTF8String];
int offset = -(sizeof scrambBase20);
for(int i=0;i<(sizeof input);i++){
if(i%(sizeof scrambBase20)==0){
offset+=(sizeof scrambBase20);
}
ret[scrambBase20[i%(sizeof scrambBase20)]+offset] = (char) ((Byte) [input characterAtIndex:i]^0x45);
}
NSString *realRet = [[NSString alloc] initWithUTF8String:ret];
[realRet stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return realRet;
}
Does anyone see an error in the conversion from Java to Objective-C? 从Java到Objective-C的转换中是否有人看到错误?
Since scrambBase20
is an array, you need to use count
instead of sizeOf
. 由于scrambBase20
是一个数组,因此您需要使用count
而不是sizeOf
。 Objective C equivalent of sizeOf()
in Java is count
. Java中sizeOf()
目标C等效于count
。
- (NSString *) descramble:(NSString*) input{
char *ret = [input UTF8String];
int offset = (-1 * [scrambBase20 count]);
for(int i=0;i<[input length];i++){
if(i% [scrambBase20 count] == 0){
offset+= [scrambBase20 count];
}
ret[scrambBase20[i%[scrambBase20 count]+offset] = (char) ((Byte) [input characterAtIndex:i]^0x45);
}
NSString *realRet = [[NSString alloc] initWithUTF8String:ret];
[realRet stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return realRet;
}
For an NSString
, equivalent of length()
in java to objective c is [string length]
. 对于NSString
,java中与目标c相等的length()
等于[string length]
。 For cString
, it is strlen()
. 对于cString
,它是strlen()
。
Update: 更新:
As per your edit, it is a C array and not NSArray. 根据您的编辑,它是一个C数组而不是NSArray。 In that case you need to use, 在这种情况下,您需要使用
- (NSString *) descramble:(NSString*) input{
char *ret = [input UTF8String];
int offset = -1 * ((sizeof scrambBase20) / (sizeof int));
for(int i=0;i < [input length];i++){
if(i%((sizeof scrambBase20) / (sizeof int))==0){
offset+=((sizeof scrambBase20) / (sizeof int));
}
ret[scrambBase20[i%((sizeof scrambBase20) / (sizeof int))]+offset] = (char) ((Byte) [input characterAtIndex:i]^0x45);
}
NSString *realRet = [[NSString alloc] initWithUTF8String:ret];
[realRet stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return realRet;
}
You are using sizeof
incorrectly: it is not a replacement for length()
of Java. 您正在使用sizeof
错误:它不是一个替代length()
的Java。
You should use strlen(cString)
on C strings, such as strings returned by UTF8String
, or [str length]
on NSString
objects. 您应该在C字符串上使用strlen(cString)
,例如UTF8String
返回的UTF8String
,或者在NSString
对象上使用[str length]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.