如何申请checkksum为char在C?申请校验为char
0
A
回答
3
校验降低的比特序列,以较短的序列,使得改变以随机变化,以较短的校验和更大的序列的结果。
一个char已经是相当小的。为了产生校验和,你需要一个位域。实际上,你将需要两个,因为一个位字段将被填充至少一个完整的字节。
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.如果此位关闭,然后通过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. 申请表验证
- 2. Rails申请表验证
- 3. 年度申请Excel申请
- 4. maven:“校验和校验失败,没有可用的校验和”,为什么?
- 5. 对原始crc32校验和的请求
- 6. 使用OpenCV申请表格验证
- 7. 申请未能协同设计验证
- 8. 申请未能协同设计验证
- 9. 验证表格日期在JavaScript申请
- 10. 验证Google付款申请API
- 11. 申请.pcm文件为sox
- 12. 为Facebook Insights申请域名
- 13. JSONArray不能申请为java.lang.String
- 14. 春MockMvc校验体为空
- 15. 泽西申请头申请失败/ xml
- 16. RS232:要校验还是不要校验?
- 17. 快递-校验中断校验器链
- 18. Xades-BES验证为校验和
- 19. 校验序列为空,那么请从主阵列
- 20. 没有申请
- 21. 没有申请
- 22. 申请退出
- 23. 申请的JavaScript
- 24. 申请表
- 25. .replace申请
- 26. 每日申请
- 27. 调查申请
- 28. 申请帆布
- 29. 申请和
- 30. 申请在MATLAB
校验和用于区分两个大型数据体而不进行比较。 char是C中的最小数据量。因此,标识函数是您可以做的最好的数据。 – Potatoswatter 2010-04-29 06:39:38
我明白了,但是如果我觉得如此倾向于做项目需求,它将如何完成? – HelpPlease 2010-04-29 06:42:00
你的意思是(char)在单个字节中吗?或者你的意思是一个数组或字符串文字?这闻起来像功课,这是一个任务? – 2010-04-29 06:42:15