Object-c 纯手写方法CRC8,16,32,跟我用笔计算的一样,不过跟那些代码算法结果32位的不同
2015-07-08 12:00
513 查看
CRC8正确方法
again只能为2个字,不然的话得自己更改23,n-8的位移数目
int again =
0x3842;
again = again <<8;
NSLog(@"%x",again);
for (int n =
23; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n= %d",n);
again ^= (0x131<<(n-8));
NSLog(@"%x",again);
}else{
again = again;
}
if (again <0x0100) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%x",again);
return
0;
}
}
CRC16正确方法
again只能为4个字,不然的话得自己更改47,n-16的位移数目
unsigned
long ploy =0x11021;
unsigned
long again = 0x11223344;
again = again <<16;
NSLog(@"%lx",again);
for (int n =
47; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n= %d",n);
again ^= (ploy<<(n-16));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x010000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
return
0;
}
}
CRC正确方法二,采用分步位移的方法,避免一次性全部位移而超出64位.
unsigned
long ploy =0x11021;
unsigned
long again = 0x01020304;
for (int j =0; j<5; j++) {
NSLog(@"j%d",j);
if (j!=0) {
again = again <<
4;
}
NSLog(@"%lx",again);
for (int n =
31; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n2= %d",n);
again ^= (ploy<<(n-16));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x010000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
break;
}
}
}
return
0;
crc32的方法
unsigned
long ploy =0x104c11db7;
unsigned
long again =
0x40ff048001000000;
for (int j =0; j<9; j++) {
NSLog(@"j%d",j);
if (j!=0) {
again = again <<
4;
}
NSLog(@"%lx",again);
for (int n =
63; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n2= %d",n);
again ^= (ploy<<(n-32));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x0100000000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
break;
}
}
}
return
0;
again只能为2个字,不然的话得自己更改23,n-8的位移数目
int again =
0x3842;
again = again <<8;
NSLog(@"%x",again);
for (int n =
23; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n= %d",n);
again ^= (0x131<<(n-8));
NSLog(@"%x",again);
}else{
again = again;
}
if (again <0x0100) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%x",again);
return
0;
}
}
CRC16正确方法
again只能为4个字,不然的话得自己更改47,n-16的位移数目
unsigned
long ploy =0x11021;
unsigned
long again = 0x11223344;
again = again <<16;
NSLog(@"%lx",again);
for (int n =
47; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n= %d",n);
again ^= (ploy<<(n-16));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x010000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
return
0;
}
}
CRC正确方法二,采用分步位移的方法,避免一次性全部位移而超出64位.
unsigned
long ploy =0x11021;
unsigned
long again = 0x01020304;
for (int j =0; j<5; j++) {
NSLog(@"j%d",j);
if (j!=0) {
again = again <<
4;
}
NSLog(@"%lx",again);
for (int n =
31; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n2= %d",n);
again ^= (ploy<<(n-16));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x010000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
break;
}
}
}
return
0;
crc32的方法
unsigned
long ploy =0x104c11db7;
unsigned
long again =
0x40ff048001000000;
for (int j =0; j<9; j++) {
NSLog(@"j%d",j);
if (j!=0) {
again = again <<
4;
}
NSLog(@"%lx",again);
for (int n =
63; n>0; n--) {
if (again >>n &
1) {
NSLog(@"n2= %d",n);
again ^= (ploy<<(n-32));
NSLog(@"%lx",again);
}else{
again = again;
}
if (again <0x0100000000) {
NSLog(@"xiao--%d",n);
NSLog(@"again=%lx",again);
break;
}
}
}
return
0;
相关文章推荐
- Objective-C属性赋值过程
- Objective-C对象模型及应用
- Objective-C对象模型及应用
- 【小测试】你真的知道blocks在Objective-C中是怎么工作的吗?
- Neither BindingResult nor plain target object for bean
- Object有哪些基本的方法
- 关于object-c中的super与self
- 关于Object-c 中的构造函数与析构函数
- Objective-C对象模型及应用
- 使用JSONObject和JSONArray
- IOS Objective-c 内存管理
- OC基础7:变量和数据类型
- Objective-C(十四、NSDate类及日期格式化类NSDateFormatter)——iOS开发基础
- java之Object转Map
- OC-可变数组-可变字典嵌套(练习-省市区)
- Fast object segmentation in unconstrained video——非限制场景快速视频对象分割 原文翻译
- jclass和jobject
- Occlusion Geodesics for Online Multi-Object Tracking编译过程
- 写一个system.data.entity的simpledatarepo,实现crudq这些功能,不需要引入entityframework,直接可以使用,用到objectset
- [Object-c] 通知二 通知传值