怎样用c++编程进行高低位互换?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用c++编程进行高低位互换?相关的知识,希望对你有一定的参考价值。

怎么用C++对一个整型数据(4个字节)进行高低位互换?即把第1字节与第4字节互换,第2字节与第三字节互换。这个整型数据是从二进制文件中读取的。

int dirnum;
int a,b;c;
a=dirnum&0x000f;第四个字节
b=dirnum&0xf000;第一个字节
c=a|b;转换后
第三个和第二个原理一样!

第二种方法:
int a;
char *p=&a;
swap(p,p+3)
swap(p+1,p+2)
再得到a就是了
参考技术A /* 采用两种方法,swap1是将整型用bite位操作
swap2是采用gcc内联汇编,使用cpu汇编指令完成
*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
using namespace std;

int swap1(int a)

unsigned char tmp,*p = (unsigned char *)&a;
tmp = p[0]; p[0] = p[3]; p[3] = tmp;
tmp = p[1]; p[1] = p[2]; p[2] = tmp;
return a;

int swap2(int a)
asm volatile("movl %1,%%eax;"
"bswap %%eax;"
"movl %%eax,%0;":
"=r"(a):
"r"(a):
"%eax");
return a;


int main(int argc,char*argv[])

if (argc == 2)
FILE*fp = fopen(argv[1],"rb");
int a;
fread(&a,sizeof(int),1,fp);
cout<<"0x"<<setw(8)<<hex<<setfill('0')<<setiosflags(ios::right)<<swap1(a)<<endl;//方法一
cout<<"0x"<<setw(8)<<setfill('0')<<setiosflags(ios::right)<<swap2(a)<<endl;//方法二

return 0;
参考技术B # include <stdio.h>
int main(void)

FILE* fp;

long int a;
char* p=(char*)&a;
char c;
fp=fopen("d:\\1.dat","rb");
if(fp==NULL)

printf("文件不存在!!");
return 9;

fread(&a,4,1,fp);
fclose(fp);
printf("交换前:%08x\n",a);
c=p[0];p[0]=p[3];p[3]=c;
c=p[1];p[1]=p[2];p[2]=c;
printf("交换后:%08x\n",a);
return 0;
本回答被提问者采纳
参考技术C 用bitset

c++多线程同时运行两个函数该怎样编程啊?

我要同时运行两个函数,一个用按键wasd控制,一个用上下左右键控制。该怎么遍啊???急急急啊
用两个循环同时运行也行

1、C++多线程也可以使用UNIX C的库函数,pthread_mutex_t,pthread_create,pthread_cond_t,pthread_detach,pthread_mutex_lock/unlock,等等。在使用多线程的时候,你需要先创建线程,使用pthread_create,你可以使主线程等待子线程使用pthread_join,也可以使线程分离,使用pthread_detach。线程使用中最大的问题就是同步问题,一般使用生产着消费者模型进行处理,使用条件变量pthread_cond_t,pthread_mutex,pthread_cond_wait来实现。
2、例程:
//创建5个线程
#include <pthread.h>
#include <stdlib.h>

void* work_thread(void* arg)


//线程执行体
return 0;

int main(int argc,char* argv[])

int nthread = 5;//创建线程的个数
pthread_t tid;//声明一个线程ID的变量;
for(int i=0;i<nthread;i++)

pthread_create(&tid,NULL,work_thread,NULL);

sleep(60);//睡眠一分钟,你可以看下线程的运行情况,不然主进程会很快节结束了。

pthread_create(&tid,NULL,work_thread,NULL);//创建线程的函数,第一个参数返回线程的ID;第二个参数是线程的属性,一般都置为NULL;第三个参数是线程函数,线程在启动以后,会自动执行这个函数;第四个参数是线程函数的参数,如果有需要传递给线程函数的参数,可以放在这个位置,可以是基础类型,如果你有不止一个参数想传进线程函数,可以做一个结构体,然后传入。
参考技术A 这个是完全取决于你的需求。如果你只是做控制同一个数据源使用的,就可以一个线程,分别在收到不同的消息,调用不同的函数。毕竟你只有一个键盘,不会真的同时收到两个事件。这种构架下面,两个函数必须比较短不能有堵塞,或者等待(大多数情况是这样的)。另外一种情况是,当你的处理量比较大,则需要多线程,也就是三个线程,一个线程收消息事件,另外两个分别处理事件,如果你不是多核CPU,其结果和上面的构架是一样的。在多线程构架下面,如果是对同一个数据体处理,那么效果和前者是一样,甚至更差。至于这么建立多线程,我就不说,这个真的需要你自己去看看。

以上是关于怎样用c++编程进行高低位互换?的主要内容,如果未能解决你的问题,请参考以下文章

c++编程中怎样用strncmp函数计算两个字符串的数目,并比较大小。

c++多线程同时运行两个函数该怎样编程啊?

C语言高低位互换操作

C语言 c++ 编程 转换

怎样学好C++编程语言

怎样学习用C++进行cad二次开发?