首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Rot13算法不工作;同样的算法与gcc的作品伟大的想法?

Android Rot13算法不工作;同样的算法与gcc的作品伟大的想法?
EN

Stack Overflow用户
提问于 2012-07-19 19:01:57
回答 1查看 185关注 0票数 1

我试图使用NDK实现一个Rot13算法,对于所有不同的操作字符串缓冲区的方法,我似乎无法获得原始的字符串缓冲区,以便随着算法的进展而获得新的值。每次在linux上使用gcc时,都会使用相同的代码。我认为这可能是优化器,但是将APP_OPTIM :=调试添加到我的Android.mk中也不起作用。任何想法或帮助都会很棒!

代码语言:javascript
运行
复制
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "FOO", __VA_ARGS__))

jbyteArray Java_NativeUtils_foo(JNIEnv* env, jobject obj, jstring item)
{
  int upper, i, a, c;
    char p[9];
    const char *d;

    //char *p = item;
    const char *s = (*env)->GetStringUTFChars(env, item, 0);
    //len = (*env)->GetStringUTFLength(env, item);
    //** make a copy
    strncpy(p, s, 8);
    p[8] = '\0';
    (*env)->ReleaseStringUTFChars(env, item, s);
    LOGI("GG1");
    LOGI(p);

    for (i=0; p[i] != 0; i++) {
      LOGI("GG2");
      a =~ (int)p[i];

      c = ~a-1 / ( ~(a|32) / 13*2-11 ) * 13;
      p[i] = (char)c;
      //** for log output
      d = (const char *)&c;
      LOGI(d);
    }

    LOGI("GG3");
    LOGI(p);

    //** convert back to a Java type
    jbyteArray out = (*env)->NewByteArray(env, 8);
    (*env)->SetByteArrayRegion(env, out, 0, 8, (jbyte *)p);
    LOGI("GG4");
    LOGI(out);

    return out;
}

产出:

代码语言:javascript
运行
复制
    ( 3521): GG1
    ( 3521): 12345693
    ( 3521): GG2
    ( 3521): 1
    ( 3521): GG2
    ( 3521): 2
    ( 3521): GG2
    ( 3521): 3
    ( 3521): GG2
    ( 3521): 4
    ( 3521): GG2
    ( 3521): 5
    ( 3521): GG2
    ( 3521): 6
    ( 3521): GG2
    ( 3521): 9
    ( 3521): GG2
    ( 3521): 3
    ( 3521): GG3
    ( 3521): 12345693
    ( 3521): GG4
    ( 3521): ??
   -( 3521): Rot13 in:12345693... out:12345693... 

输入与输出相同,不移13!=============== GCC版本。

代码语言:javascript
运行
复制
 #include <stdio.h>
    #include <string.h>


    main(int argc, char** argv) {
      int upper, i, a, c;
      char p[9];
      char *in;


      in = argv[1];

      strncpy(p, in, 8);
      p[8] = '\0';
      printf("in ...%s... p ...%s...", in, p);

      for (i=0; p[i] != 0; i++) {
        a =~ (int)p[i];
        c = (~a-1 / ( ~(a|32) / 13*2-11 ) * 13);
        p[i] = (char)c;
      }

      printf("out ...%s...", p);

      //while(a=~getchar())putchar(~a-1/(~(a|32)/13*2-11)*13);}
    }

输出:$./a.out Freddy in ...Freddy.P ...Freddy...out ...Serqql. $./a.out Serqql在...Serqql.P ...Serqql...out ...Freddy.

EN

回答 1

Stack Overflow用户

发布于 2012-08-22 06:22:28

在ROT13算法中,唯一变化的字符是字母,数字保持不变。ROT13('12345693') 等于'12345693'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11567563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档