读取char *作为单个char(In C)

时间:2014-10-06 23:56:49

标签: c arrays strtok

我会尽力解释这一点,但如果你不能理解我的问题,那么请随时要求澄清:)

处理教程的问题,可以加密纯文本消息或解密密文消息。加密明文消息工作正常,我所坚持的是解密。对于解密,输入一系列数字(每个数字用空格分隔),然后解密回原始字符。这些数字系列保存在名为' message'的unsigned char数组中。现在我正在使用strtok方法来分割'消息'每个" &#34 ;.我也知道我的问题是什么,只是不知道如何解决它。编码功能加密和解密,并正在100%正常工作。您将在下面的代码中注意到我传入109以编码哪些输出' h'正如它应该。但是,当我使用strtok方法从消息字符串中获取109时,109并不被视为单个数字,而是被视为1,a 0和9.希望你是全部还在我这儿。基本上我想知道如何将1号,0号和9号视为1个单号?提前致谢

unsigned char *parts;
parts = strtok(message, " ");
int counter = 0;
printf("%c", encode(109, key, counter));
while (parts != NULL) {
  printf("%c", encode(*parts, key, counter));
  counter++;
  parts = strtok(NULL, " ");
}

2 个答案:

答案 0 :(得分:3)

*parts传递给encode()函数会传入ASCII字符' 1'。您需要将char数组转换为单个十进制值。现在你有{' 1',' 0',' 9',' \ 0'您可以使用atoi( parts )之类的内容,因此您对编码的调用是encode( atoi( parts ), key, counter )

答案 1 :(得分:0)

尝试strcat

unsigned char *parts;
char fullnum[44];
strcpy(fullnum , "");
parts = strtok(message, " ");
int counter = 0;
printf("%c", encode(109, key, counter));
while (parts != NULL) {
  printf("%c", encode(*parts, key, counter));
  counter++;
  strcat(fullnum , part);
  parts = strtok(NULL, " ");
}

现在fullnum将包含109作为字符串,您可以使用strtol将其转换为int

相关问题