프로그래밍 알고리즘

[정올 1419] 엔디안

꾸준한사람 2023. 1. 4. 22:56
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=1419&sca=99 

 

JUNGOL

 

www.jungol.co.kr

#include <stdio.h>

/*
	0001 0010 0011 0100 0101 0110 0111 1000 (Big Endian)
	1	 2	  3	   4	5	 6	  7	   8
	0111 1000 0101 0110 0011 0100 0001 0010 (Little Endian)
	7	 8	  5	   6	3	 4	  1	   2
	8비트씩 끊어서 표현함
*/

/*
	Horner's method
	a		ra
	1204	0
	120		4
	12		40
	1		402
	0		4021
	while (a) {
		ra = ra * 10 + a % 10;
		a /= 10;
	}
*/

typedef unsigned int u32;
u32 input, output;
u32 array[4];

//Horner's method
u32 Horner(u32 a, u32 ra = 0) {
	while (a) {
		ra = (ra << 8) | (a & 0xFF);
		a >>= 8;
	}
	return ra;
}
//Union
inline void swap(char& a, char& b) {
	char t = a; a = b; b = t;
}
u32 convertEndian(u32 a) {
	union { u32 k; char chr[4]; };//익명 공용체
	k = a;
	swap(chr[0], chr[3]);
	swap(chr[1], chr[2]);
}
//Bit reverse(만약 32를 완전히 뒤집어야 한다면?) 분할정복
u32 bitReverse(u32 k) {
	k = (k << 16) | (k >> 16); //16개씩 바꾸고
	k = (k << 8 & 0xFF00FF00) | (k >> 8 & 0x00FF00FF); //16개 안에서 8개씩 바꾸고
	k = (k << 4 & 0xF0F0F0F0) | (k >> 4 & 0x0F0F0F0F); //8개 안에서 4개씩
	k = (k << 2 & 0xCCCCCCCC) | (k >> 2 & 0x33333333); //4개 안에서 2개씩
	k = (k << 1 & 0xAAAAAAAA) | (k >> 1 & 0x55555555); //2개 안에서 1개씩
}

int main() {
	scanf("%d", &input);
	for (int i = 0; i < 4; i++) {
		array[i] = (input >> (i * 8)) & 0xFF;
	}
	for (int i = 0; i < 4; i++) {
		output += (array[i] << (3 - i) * 8);
	}
	printf("%u\n", output);

	return 0;
}
반응형