Fast string to integer

Fast string to integer#

문제#

보통의 경우 10진수 또는 16진수의 string을 integer로 변환하기 위하여 strtoul( ) 를 사용합니다.
하지만, strtoul( )를 매우 많이 반복하는 경우 처리 속도가 느립니다.
다음 코드는 strtoul( )을 300,000,000회 반복하였으며, 약 5초가 소요되었습니다.

#include <iostream>
#include <chrono>

int main()
{
	const char* hexString = "19AF";   // 0x19AF = 6575

	auto start = std::chrono::high_resolution_clock::now();

	for (int i = 0; i < 300000000; i++)
	{
		int value = strtoul(hexString, NULL, 16);
	}

	auto end = std::chrono::high_resolution_clock::now();
	std::chrono::duration<double, std::milli> elapsed = end - start;
	std::cout << "time: " << elapsed.count() << " ms" << std::endl;

    return 0;
}

개선#

LUT(LookUp Table)를 사용하면 strtoul( ) 보다 빠르게 처리할 수 있습니다.
10진수, 16진수의 string에 포함되는 문자는 다음과 같습니다.