2014-02-25 45 views
0

我想將函數分配給packetbuf_copyfrom()。我使用了*&,但它在轉移它後並沒有給我正確的密碼。將函數分配給packetbuf_copy從

這是函數:

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()功能,從功能caesar複製。

我該怎麼辦?

回答

0

首先,愷撒密碼公式爲

enter image description here

所以,你的代碼可能是:

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); 
+0

你的加密片段只能合理地處理小寫字母;對於大寫字母和(特別是)非字母,它會產生...不正確的輸出。 –

+0

@JonathanLeffler是的,的確,我在代碼註釋和'Second'聲明中提到過。 – yongzhy

0

你可以做的就是爲你的問題多一點背景下的第一件事。然而,谷歌的搜索可以解救:您可以在線找到packetbuf_copyfrom()的文檔。

函數的簽名是:從外部數據

int packetbuf_copyfrom(const void *from, uint16_t len) 

複製到packetbuf。

鑑於您caesar()功能不到位的轉變,需要調用:

packet_copyfrom(cipher, 6); 

這應該在5個移動字符和結尾的空複製到您的packetbuf。如果您只想要5個字符,請將6更改爲5.

您應該檢查caesar()函數;它將所有字符(包括空字節)移動shift個位置。這是一個可能的設計決定,但它不是一個常見的決定。某些字符將映射到空字節(字符碼爲125,通常爲'{')。小心。

+0

我做了packet_copyfrom(cipher,6);但它不起作用,Q是我可以分配一個函數到packet_copyfrom(,); ?? (對我來說)這個問題沒有意義( – user3324657

+0

)。我不明白'packet_copyfrom(,);'表示什麼意思。如果您的意思是'我可以使用指針來將數據複製到正確的位置嗎?'那麼答案是'是的,只要界面匹配或者你創建了一個函數以便界面匹配'。如果你的意思是別的,請解釋一下。我也不清楚你想在哪裏使用指針功能。我明白英語可能不是你的第一語言,但我無法理解你的意思。 packet_copyfrom()是否應該替換'printf()',也許? –