날짜를 ASCII 바코드로 인코딩합니다
문제
날짜 정보의 인코딩을 가능한 한 짧은 선형 바코드로 조사하고 있습니다. 우리가 가진 아이디어 중 하나는 날짜 숫자에 ASCII 문자를 사용하는 대신 날짜 정보를 인코딩하는 것입니다.
- 인코딩 된 최초의 날짜는 2009 년 1 월 1 일입니다
- 날짜는 인쇄 가능한 ASCII 문자를 사용하여 인코딩해야합니다
해결책
날짜 만 중요한 경우 (시간이 아님) :
Take the date to be encoded.
Subtract 1-1-2009 from it
Get the amount of elapsed days.
이 숫자를 인쇄 가능한 ASCII 숯 (ASCII 48-127)으로 인코딩하려면 다음을 수행하십시오.
의사 코드 :
const int ASCIILOWRANGE = 48
const int ASCIIHIGHRANGE = 126
const char ASCIIENDMARKER = 127;
String convertToAscii(int numberOfDays)
{
String output = "";
while(numberOfDays>0)
{
output += (char) ASCIILOWRANGE + numberOfDays % (ASCIIHIGHRANGE-ASCIILOWRANGE);
numberOfDays /= (ASCIIHIGHRANGE-ASCIILOWRANGE);
}
output += ASCIIENDMARKER ;
return output;
}
//decoder
int convertToDays(String ascii)
{
char rightmost;
int numberOfDays = 0;
while(ascii.length>0)
{
rightmost = ascii[0];
if(rightmost == ASCIIENDMARKER ) break; //ready
numberOfDays *= (rightmost - ASCIILOWRANGE) * (ASCIIHIGHRANGE-ASCIILOWRANGE);
ascii = ascii.substr(1); //remove rightmost char from string
}
return numberOfDays ;
}
이러한 인코딩 방식이 가장 밀도가 높습니다. 그것은 단지 2 숯으로 미래에 최대 96 일을 인코딩하기 때문에. 9216 일, 3 숯으로, 4 숯으로 884736 일.
다른 팁
날짜 자체를 사용하십시오 : 2009 년 1 월 1 일.
읽기 중에 약간의 처리 로직이 마음에 들지 않으면 "/"또는 사용하는 분리기 문자를 제거하는 것과 같은 작업을 수행 할 수 있습니다.
기본적으로 "01012009"와 같은 것을 바코드에 인코딩 한 다음 Decode 프로세스가 첫 두 숫자를 월, 다음 두 숫자, 다음 두 숫자, 마지막 4 개를 올해로 읽게됩니다. 그것들은 똑바로 ASCII이기 때문에 정말 어려운 처리없이 작동합니다.
두 번째 대안은 2009 년 1 월 1 일 -10 일을 "0"날짜로 유지 한 다음 그 이후로 일수를 인코딩하는 것입니다. 디코딩 프로세스는 숫자를 읽은 다음 며칠을 1/1/09에 추가하는 것입니다. 이것은 2009 년 1 월 5 일에 "4"로 인코딩 된 다음 날짜를 읽고 싶을 때 4에 4에 4에 추가하여 1 월/5/09를 얻을 수 있습니다.
제휴하지 않습니다 StackOverflow