문제

날짜 정보의 인코딩을 가능한 한 짧은 선형 바코드로 조사하고 있습니다. 우리가 가진 아이디어 중 하나는 날짜 숫자에 ASCII 문자를 사용하는 대신 날짜 정보를 인코딩하는 것입니다.

  1. 인코딩 된 최초의 날짜는 2009 년 1 월 1 일입니다
  2. 날짜는 인쇄 가능한 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를 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top