请问一个字节的数据,如何求起奇偶校验位?

Reeezak 2003-05-15 10:06:34
用C应该怎么写?
不可以位寻址。头疼啊
大哥们帮忙啊
...全文
437 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flab_lwq 2003-05-19
  • 打赏
  • 举报
回复
实际上当你选择“奇”校验时,那么每个发送的字节(二进制)中的“1”加上校验位,“1”的总数为奇数,比如你要发送'A','A'字符的ASCII码是0x41,二进制是01000001,"1"的个数为2,这样为了是"1"的总数为奇数,校验位就应该是1.
也就是说,奇校验是保证发出字节和校验位组成的一组0,1数据中的1的个数为奇数.'A'在传输中是以010000011(不考虑停止位)的形式传送的.
偶校验同样道理.
当然问题的关键在于求出字节中"1"的个数.
chen3feng 2003-05-17
  • 打赏
  • 举报
回复
最好用汇编实现,否则慢几十倍
inline bool is_parity(int x)
__asm
{
{
mov eax, x
text eax, eax
setp al
}
}

inline bool is_parity(short x)
{
__asm
{
mov ax, x
text ax, ax
setp al
}
}

inline bool is_parity(char x)
{
__asm
{
mov al, x
text al, ax
setp al
}
}
Reeezak 2003-05-16
  • 打赏
  • 举报
回复
woshinzg,我知道奇偶校验是怎么回事,我问的是怎么用C语言实现
由于那个寄存器不能为寻址,所以这样相加几乎是不可能的
woshinzg 2003-05-16
  • 打赏
  • 举报
回复
如果是奇校验,把一个字节的8个比特位相加如果是1则校验位为0
如果是0则校验位为1
偶校验反之


—————————————————————————————————
因为陌生,所以勇敢,因为距离,所以美丽。
QQ:6785267
Reeezak 2003-05-16
  • 打赏
  • 举报
回复
THX very much!
flab_lwq 2003-05-16
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
//ch is the byte u want to checksum
unsigned char ch = 0xff;
int check_sum = 0, ch_num = ch;

for(int i = 0; i < 8; i++) {
ch_num /= 2;
check_sum += ch_num % 2;
}

if(check_sum % 2) printf("odd");
else printf("even");
}
shishiXP 2003-05-15
  • 打赏
  • 举报
回复
char *p=(char *)字节的地址;
char buf[10];
int temp=atoi(p);
itoa(temp,buf,2);
int total=0;
for(int i=0;buf[i]!='\0';i++)total+=(buf[i]-'0');
if(total%2)cout<<"奇";
else cout<<"偶";

瞎写的!!!!!!!!!!!!!!!!!
:) :)

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧