첫째, Caesar 암호 공식은
따라서 코드는 다음과 같습니다.
cipher[i] = (cipher[i] - 'a' + shift)%26 + 'a'; // for input is lower case and output is lower case.
둘째, 수식을 적용 할 때 대소 문자를 고려해야합니다. 모두 대문자 또는 소문자를 원하십니까? 인코딩과 디코딩이 일관 적인지 확인하십시오.
셋째, 전달 cipher
에packetbuf_copyfrom
packetbuf_copyfrom(&cipher[0],8);
-------------------가장 먼저 할 수있는 일은 질문에 대한 컨텍스트를 조금 더 제공하는 것입니다. 그러나 Google의 검색이 구출 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, 일반적으로 '{'
)에 매핑됩니다 . 조심해.
출처
https://stackoverflow.com/questions/22029786