2

EDIT:これは、変換されたコードの修正版です

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;
}

Objective-C に変換しようとしている Java のこのブロックがあります。

復号化しようとしている暗号化された文字列があります。

[descramble: @"6&eee *eee1ee1e eee!"];

なるはず

"testcode" (without quotes)

代わりに、出力を取得します

"6&sec *ee 1ee1e  ee!" (without quotes)

次のコードは私の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;
}

次のコードは、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;
}

Java から Objective-C への変換でエラーが発生することはありますか?

4

2 に答える 2

2

は配列であるため、の代わりにscrambBase20使用する必要があります。Javaの Objective C に相当するものは です。countsizeOfsizeOf()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;
}

の場合、Java で目的NSStringの c に相当するのは です。の場合、です。length()[string length]cStringstrlen()

アップデート:

あなたの編集によると、それはC配列であり、NSArrayではありません。その場合、使用する必要があります。

- (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;
}
于 2012-12-10T02:57:19.133 に答える
2

使い方がsizeof間違っています: Javaの代替ではありません。length()

strlen(cString)によって返される文字列などの C 文字列UTF8String、またはオブジェクトに対して使用する必要[str length]があります。NSString

于 2012-12-10T02:58:23.280 に答える