读书人

char数组内存循环移位有关问题

发布时间: 2013-06-26 14:29:32 作者: rapoo

char数组内存循环移位问题
比如,char a[2] = {0x2f,0x3e } ,循环右移四位变成{0xe2,0xf3},有没有什么快速的方法。
[解决办法]


char a[2]= {0x2f,0x3e };

unsigned short *tmpShorta;
unsigned short tmpShortb=0;
char b[2];

tmpShorta = (unsigned short*)a;
tmpShortb= *tmpShorta/16 + *tmpShorta%16*0x1000;
memcpy(b,&tmpShortb,sizeof(b));

移位可以看做是乘除法,十六进制移位就是乘除16
[解决办法]
#include <stdio.h>
int ROR(int v,unsigned char b) {
__asm {
push ecx
mov eax,v
mov cl,b
ror eax,cl
pop ecx
}
}
void main() {
printf("0x%08x\n",ROR(0x12345678,4));
}
//0x81234567

[解决办法]
union st
{
unsigned short s;
unsigned char a[2];
} v1;
unsigned char a[2] = {0x2f,0x3e }; // {0xe2,0xf3}
v1.a[0]=a[1];
v1.a[1]=a[0];
v1.s = ((v1.s << 4)
[解决办法]
(v1.s>>12));
cout << hex << (short)v1.a[0] << hex << (short)v1.a[1] << endl;

读书人网 >C++

热点推荐