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

Reeezak 2003-05-15 10:06:34
用C应该怎么写?
不可以位寻址。头疼啊
大哥们帮忙啊
...全文
154 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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<<"偶";

瞎写的!!!!!!!!!!!!!!!!!
:) :)
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2003-05-15 10:06
社区公告
暂无公告