c로 chars에 checkksum을 어떻게 적용합니까?체크섬을 C에서 char로 적용
0
A
답변
3
체크섬은 비트 시퀀스를 더 짧은 시퀀스로 줄이므로 더 큰 시퀀스로 변경하면 더 짧은 체크섬이 무작위로 변경됩니다.
숯은 이미 아주 작습니다. 체크섬을 생성하려면 비트 필드가 필요합니다. 사실, 하나의 비트 필드만으로는 최소한 전체 바이트가 패딩되므로 두 개가 필요합니다.
struct twochars_checksum {
unsigned sum_a : CHAR_BIT/2;
unsigned sum_b : CHAR_BIT/2;
};
void sum_char(char c, struct twochars_checksum *dest, int which) {
int sum;
sum = c^c >> CHAR_BIT/2; // suboptimal, but passable
if (which == 0) {
dest->sum_a = sum;
} else {
dest->sum_b = sum;
}
}
1
비슷한 방법으로 체크섬을 사용하여 데이터 바이트를 전송할 것을 제안하십시오.
체크섬 계산 알고리즘은 매우 간단하며 다음과 같습니다.
1. 비트가 켜져 있는지 확인한 다음 해당 비트 값 (즉, 비트 위치의 값에 2)을 체크 합계에 추가하십시오.
2.If 비트 오프 후 1참고하여 합계를 감지 : 당신은 기능 calculate_checksum를 변경하여 자신의 체크섬 알고리즘을 사용할 수 있습니다().
자신의 처리 논리를 set_transfer_data()에 포함시킬 수 있습니다.
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#define NUM_BITS (8)
uint16_t calculate_checksum(const uint8_t data)
{
uint16_t checksum = 0;
uint8_t bit_index = 0;
uint8_t bit_value = 0;
while(bit_index < NUM_BITS)
{
bit_value = 1 << bit_index++;
checksum += (data & bit_value) ? bit_value : -1;
}
return (checksum);
}
uint8_t set_transfer_data(uint32_t *dest_data , const uint8_t src_data , const uint16_t checksum)
{
uint8_t return_value = 0;
*dest_data = checksum << NUM_BITS | src_data ;
return (return_value);
}
int main()
{
uint8_t return_value = 0;
uint8_t source_data = 0xF3;
uint32_t transfer_data = 0;
uint16_t checksum = 0;
checksum = calculate_checksum(source_data);
printf("\nChecksum calculated = %x",checksum);
return_value = set_transfer_data(&transfer_data,source_data,checksum);
if(0 == return_value)
{
printf("\nChecksum added successfully; transfer_data = %x",
transfer_data);
}
else
{
printf("\nError adding checksum");
}
return (0);
}
관련 문제
- 1. C에서 문자열을 char로 변환하는 방법
- 2. C에서 Blowfish 암호화 적용 문제
- 3. 문자열을 char로 변환
- 4. System.Windows.Forms.Keys의 시퀀스를 Char로 변환
- 5. char로 변환되었지만 공백으로 완료
- 6. NSString을 char로 변환하는 방법?
- 7. 문자열 ^을 char로 변환해야합니다. *
- 8. boost :: uuid를 char로 변환하십시오.
- 9. 체크섬을 생성하는 알고리즘 찾기
- 10. 체크섬을 사용하면 충분합니다.
- 11. c char *를 char로 분할 **
- 12. C++ int와 string을 char로 변환 *
- 13. 자바 객체의 체크섬을 생성하는 방법
- 14. 긴 값 배열로 체크섬을 구축하십시오.
- 15. 파일 무결성 적용
- 16. C에서 char로 typecasting 할 때 문자를 만드는 데 사용되는 바이트는 무엇입니까?
- 17. 문자열을 char로 변환 할 수 있지만 문자열을 char로 변환 할 수는 없습니다.
- 18. QT에서 16bit QImage를 8bit unsigned char로 변환하십시오.
- 19. std :: wstring을 C++의 const * char로 변환하십시오.
- 20. varchar를 char로 변환 하시겠습니까? 오류 수정 방법
- 21. 유니 코드 문자열을 char로 변환하는 방법은 무엇입니까?
- 22. char **를 char * 또는 char로 변환
- 23. 변환 키. Compact Framework에서 char로 입력
- 24. Nexus 저장소에서 잘못된 체크섬을 수정하려면 어떻게해야하나요?
- 25. 안정적인 미디어 파일의 체크섬을 만들려면 어떻게해야합니까?
- 26. Perl에서 체크섬을 생성하는 데 필요한 지침이 필요합니다.
- 27. md5_file은 체크섬을 가져 오는 파일을 다운로드합니까?
- 28. C#에서 SHA1 파일 체크섬을 어떻게 수행합니까?
- 29. UDP 패킷에 체크섬을 적용하는 올바른 방법은 무엇입니까
- 30. 체크섬을 16 진수 형식으로 언팩하는 방법은 무엇입니까?
체크섬은 두 개의 큰 본문을 비교하지 않고 구분하는 데 사용됩니다. char는 C에있는 데이터 중 가장 작은 양입니다. 따라서 식별 함수가 가장 좋습니다. – Potatoswatter
제가 볼 수는 있지만 그렇게 생각한다면 프로젝트 요구 사항을 어떻게 수행할까요? – HelpPlease
1 바이트와 같이 (char)를 의미합니까? 또는 배열 또는 문자열 리터럴을 의미합니까? 숙제 냄새가 나는데 숙제 때문에 그런가요? –