密码消息,然后在Objective-C中解码它

时间:2012-04-29 03:12:42

标签: objective-c xcode encoding cryptography

我想不出更好的方式来描述它,所以就是这样。

我正在编写一个程序,非常简单,你输入一个你想要编码的信息,然后把它变成一个编码信息,比如把'简单',例如,把它翻译成'gcua'。 '(通过将每个字母向前移动两个字母表来实现)

然后,接收端的人可以将其粘贴到程序中,然后将其恢复为原始文本。我显然在想一些比把两个或两个字母移动更复杂的东西,但是,我离题了。

我有一些非常真实的基本代码。我遇到的问题是打破消息的每个字母以应用编码,然后将其重新组合在一起。

我不是要求该程序,我更多地询问如何能够对消息进行编码。 (例如,将字符串放入可编码的格式)。它不是精心设计的,只是非常简单,直截了当。

这是一个基本大纲(感谢那些帮助排除故障的人):

int main (int argc, const char * argv[]) {
    @autoreleasepool {

        char choice, yes = 'y', no = 'n', buf[1024];

        NSString *plainText, *encrypted, *decoded;

        NSLog(@"Encode (Y) or Decode (N)");
        scanf("%c", &choice);
        choice = tolower(choice);

        if (choice == yes) {

            scanf("%1024s", buf);
            plainText = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding];

        } else if (choice == no) {

        }

    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

%c表示char*参数,但您传递的是char**

您应该设置变量char,而不是char*

char choice, yes = 'y', no = 'n';

在与choicey进行比较之前,将n转换为小写也是有意义的,因为您要求最终用户输入大写 { {1}}或Y

N

编辑以回复问题的编辑:您无法使用scanf("%c", &choice); choice = tolower(choice); 将值读入%s。您应该使用NSString,并限制char buf[MAX]

中的长度
scanf

答案 1 :(得分:0)

%sscanf的规范告诉它读入您已经分配的char数组。但是你正在向NSString传递一个零指针。

尝试这样的事情:

NSData *data = [[NSFileHandle fileHandleWithStandardInput] readDataToEndOfFile];
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];