블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

16비트 리틀엔디언을 빅엔디언으로 변환하는 함수.

32비트씩 처리하여, 


속도 테스트

루프언롤링 8회 + 읽기 버퍼 8개 + 출력은 읽기버퍼 사용안하고, 바로 출력 할때, 가장 빠름.


void UTF16_LE_to_BE_fast(unsigned short *p16,int nsample)

{

unsigned int n,m;unsigned long *p32,a[8];


//메모리4바이트정렬

while(nsample)//16비트 홀수 데이터 처리

{

if((((size_t)p16)&3)==0)break;

a[0]=*p16;

*p16=(unsigned short)((a[0]>>8)|(a[0]<<8));

p16++;

nsample--;

}


p32=(unsigned long *)p16;

n=nsample>>1;//한번에 2개의 샘플씩 처리.

m=n>>3;//32비트,8개씩처리

while(m)

{

m--;

/*32비트가 아닌 16비트 단위로 변경한다.

0x12341234 -> 0x34123412

0x12341234 >>8 : 0x00123412 & 0x00FF00FF

0x12341234 <<8 : 0x34123400 & 0xFF00FF00

*/

a[0]=p32[0]; a[1]=p32[1]; a[2]=p32[2]; a[3]=p32[3];

a[4]=p32[4]; a[5]=p32[5]; a[6]=p32[6]; a[7]=p32[7];

p32[0]=((a[0]>>8)&0x00FF00FF) | ((a[0]<<8)&0xFF00FF00);//저장까지 총 6회 연산으로 2샘플처리

p32[1]=((a[1]>>8)&0x00FF00FF) | ((a[1]<<8)&0xFF00FF00);

p32[2]=((a[2]>>8)&0x00FF00FF) | ((a[2]<<8)&0xFF00FF00);

p32[3]=((a[3]>>8)&0x00FF00FF) | ((a[3]<<8)&0xFF00FF00);

p32[4]=((a[4]>>8)&0x00FF00FF) | ((a[4]<<8)&0xFF00FF00);//저장까지 총 6회 연산으로 2샘플처리

p32[5]=((a[5]>>8)&0x00FF00FF) | ((a[5]<<8)&0xFF00FF00);

p32[6]=((a[6]>>8)&0x00FF00FF) | ((a[6]<<8)&0xFF00FF00);

p32[7]=((a[7]>>8)&0x00FF00FF) | ((a[7]<<8)&0xFF00FF00);

p32+=8;

}

m=n&7;

while(m)//32비트 1개씩 처리

{

m--;

a[0]=p32[0];

p32[0]=((a[0]>>8)&0x00FF00FF) | ((a[0]<<8)&0xFF00FF00);//저장까지 총 6회 연산으로 2샘플처리

p32++;

}

if(nsample&1)//16비트 홀수 데이터 처리

{

a[0]=*((unsigned short *)p32);

*((unsigned short *)p32)=(unsigned short)((a[0]>>8)|(a[0]<<8));

}

}

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함