首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-06-26 
char数组内存循环移位问题比如,char a[2] {0x2f,0x3e } ,循环右移四位变成{0xe2,0xf3},有没有什么快速的

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;

热点排行