将整数作为字符串追加到循环中的char[]中

将整数作为字符串追加到循环中的char[]中,c,char,int,C,Char,Int,给出下面的例子 我通过在每个字符的数字表示中添加一个秘密数字来对字符串进行编码 A -> 41 = 65 + secret B -> 42 = 66 + secret 1 -> 31 = 49 + secret 2 -> 32 = 50 + secret and so on 因此,结果将有几个数字。我可以使用 for(int i=0; i<len; i++) { int e = ( (int)caracter + pub ) % mod;

给出下面的例子

我通过在每个字符的数字表示中添加一个秘密数字来对字符串进行编码

A -> 41 = 65 + secret
B -> 42 = 66 + secret
1 -> 31 = 49 + secret
2 -> 32 = 50 + secret
and so on
因此,结果将有几个数字。我可以使用

for(int i=0; i<len; i++) {     
    int e = ( (int)caracter + pub ) % mod;
    printf("%d ", e);                        
} 
谢谢

注意缓冲区大小。你可以做溢出

例如:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int e[5] = {12,34,78,33,15577};
    int n = 5;
    int len = 0;
    int i = n;
    while (i--) len += snprintf(NULL, 0, "%d ", e[i]);
    char* str = (char*)malloc(sizeof(char)*len);
    char* str_cur = str;
    i = n;
    while (i--) str_cur += sprintf(str_cur, "%d ", e[i]);
    printf("%s",str);
    return 0;
}
#包括
#包括
int main(){
int e[5]={12,34,78,3315577};
int n=5;
int len=0;
int i=n;
而(i--)len+=snprintf(NULL,0,“%d”,e[i]);
char*str=(char*)malloc(sizeof(char)*len);
char*str_cur=str;
i=n;
而(i--)str_cur+=sprintf(str_cur,“%d”,e[i]);
printf(“%s”,str);
返回0;
}
返回

1557733783412


结合
sprintf
strcat
,或
sprintf
strlen
,可以实现您想要的功能。您需要识别的是,ASCII为本质上是一个单字节(两个十六进制数字)的值提供了单字符表示。出于输出目的,您可能希望每个字符输出2位十六进制值。简单地将编码字符串作为无符号字符数组处理是很方便的。(这就是加密例程处理问题的方式)变得更好了,但是,为了便于讨论,如果两个编码值最终成为
'c'
(2位
int
值)和
'd'
(3位
int
值)会怎么样。如果需要读回编码字符串,如何区分2位和3位数值?(提示:通过将每个字节作为2位十六进制值处理,问题就消失了…)这是值得理解和至少解决的问题。看:什么问题?逐字符读取。将每个字符放入缓冲区。如果找到空间,将缓冲区解码为int。是的,十六进制更好。但一切都比用静态移位编码文本要好。
#include <stdio.h>
#include <stdlib.h>

int main() {
    int e[5] = {12,34,78,33,15577};
    int n = 5;
    int len = 0;
    int i = n;
    while (i--) len += snprintf(NULL, 0, "%d ", e[i]);
    char* str = (char*)malloc(sizeof(char)*len);
    char* str_cur = str;
    i = n;
    while (i--) str_cur += sprintf(str_cur, "%d ", e[i]);
    printf("%s",str);
    return 0;
}