0

我想将功能分配给packetbuf_copyfrom(). 我使用过*&但它在转换后并没有给我正确的密码。

这是功能:

void caesar (char cipher[], int shift) {
    int i = 0;
    while (cipher[i] != '\0') {
        cipher[i] += (shift);
        i++;
    }
    printf("%s\n", cipher);
}

{
  char cipher[10]="Hello";
    int key = 5;
    caesar (cipher, key);   
    packetbuf_copyfrom((*caesar),8);

}

我希望packet_copyfrom()函数从 function 复制caesar

我应该怎么办?

4

2 回答 2

0

首先,凯撒密码公式为

在此处输入图像描述

所以你的代码可能是:

cipher[i] = (cipher[i] - 'a' + shift)%26 + 'a'; // for input is lower case and output is lower case.

其次,应用公式时应考虑字符大小写。你想要全部大写还是小写?只要确保你的编码和解码一致。

三、传递cipherpacketbuf_copyfrom

packetbuf_copyfrom(&cipher[0],8);
于 2014-02-26T01:22:14.147 回答
0

您可以做的第一件事是为您的问题提供更多背景信息。但是,Google 的搜索起到了救援作用:您可以packetbuf_copyfrom()在线找到文档。

该函数的签名是:

int packetbuf_copyfrom(const void *from, uint16_t len)

从外部数据复制到 packetbuf。

鉴于您的caesar()函数进行了原地转换,您需要调用:

packet_copyfrom(cipher, 6);

这应该将 5 个移位的字符和一个尾随的 null 复制到您的 packetbuf。如果您只想要 5 个字符,请将 6 更改为 5。

您可能应该检查您的caesar()功能;它按位置移动所有字符,包括空字节shift。这是一种可能的设计决策,但不是通常的决策。某些字符将被映射到一个空字节(通常是 125 字符代码'{')。当心。

于 2014-02-26T01:23:59.477 回答