272바이트에서 16바이트를 벌기

kaos의 이미지

먼저번에 272바이트 데이터를 압축하여 16바이트를 더 추가하여도
토탈 272바이트를 넘지않는 데이터를 만드는 방법에 대해서 질문을
올렸을때 많은분들이 답변을 올려주셔서 감사하게 생각합니다.

그런데 대부분의 답변들이 데이터를 PACK 하는 방법을 추천하여
주셨는데요

제가 가공할 데이터가 한글이 약 120바이트 숫자와영문이 약 152바이트로
구성된 데이터 입니다.
이걸 아무리 생각해도 효과적으로 PACK(?)할 방법이 생각나지 않습니다.
한글의 맨처음 비트가 1이니까 이걸 떼어낸다고 해도 어디서부터 어디까지가
한글이라는 추가 데이터가 필요하고 또한 120바이트에서 1비트씩 줄여나간다해도 16바이트를 벌순없구요

그래서 한글을 제외한 곳에서 1비트씩 벌면 될텐데 그 효과적인 방법이 생각
나질 않습니다.

나름대로 허프만코드를 이용해 압축도 해보고 오히려 데이터가 더 늘어나서
한문자를 4비트씩 쪼개서 허프만코드를 실행해도 더 늘진않았지만
줄어들지도 않았습니다.

제가 다루어야하는 데이터 구조는 아래와 같습니다.
A : 아스키(영문,숫자), H : 한글
A:6 바이트
H:30 바이트
H:20 바이트
A:13 바이트
A:10 바이트
A:6 바이트
H:30 바이트
H:20 바이트
H:20 바이트
A:8 바이트
A:8 바이트
A:8 바이트
A:8 바이트
A:2 바이트
A:23 바이트
A:6 바이트
A:1 바이트
A:40 바이트

딱 이구조 하나라면 STRUCT를 사용해서 쓸수있을텐데 데이터 구조가 이거말고
다양하거든요..

근데 이구조가 한글이 제일 많이 들어가 있어서 이것만 해결하면 다른 구조는
쉽게 해결을 할수 있을거 같아서 질문드립니다.

여러분들의 조언을 기다리겠습니다.
감사합니다.

ㅡ,.ㅡ;;의 이미지

데이터소스에 따라서 될수도 있고 안될수도 있겠네요..

압축이란 모든데이터를 다 압축할수 있는건 아니죠..

그러나 특정패턴의 데이터만을 압축할수 있는 엔진을 따로 개발하면 될수도

있습니다. 물론이것은 오히려 단순하면 앞축을 못할우려도 생기죠..

따라서 완벽하게 모든데이터를 압축할수 있는방법은 없습니다.

따라서 이데이터를 압축할수 있나 없나는 그데이터소스에 의해 결정된다고
봐도 무방합니다.


----------------------------------------------------------------------------

ironiris의 이미지

안녕하세요~
A필드와 H필드가 있는데 H필드에는 무조건 A가 안들어가는 형태인가요?
아니면 들어갈수도 있는 형태인지요... 들어갈수도 있다...라면 좀 곤란하구요.
하여간... 제 의견은 이렇습니다.
A필드일 경우 무조건 앞에 1bit 씩 떼어냅니다. 그러면 한문자당 7bit가 되지요.
글자수만큼 bit 가 확보됩니다.
두번째 한글필드의 경우는 한글만 들어간다면 15bit 씩 짤라서 사용하면 되지만 영문이 들어갈수도 있다면 제가 밑에서 언급했다시피 영문일경우는 8bit로(이 경우는 앞에 1비트빼고 뒤에 1비트는 무조건 0 입니다.)표기하고 한글일 경우는 15비트로 표기하면(이때 한글의 8번째 비트는 무조건 1입니다.) 앞에서 8번째비트를 읽어서 1이면 한글로 생각해서 15비트만큼 잘라내서 한글로 바꿔주고 0이면 8비트 잘라서 영문으로 바꿔주는 형태를 취합니다.
그러니 예시로 들어놓은 구조에서.... 아스키의 필드의 아스키문자만의 갯수를 세어보니.. 영문필드에서만 139bit 를 확보할수 있고 한글필드에서 한글갯수만큼 확보가 가능하니 16byte를 확보하는 것은 쉽다고 생각합니다.
오히려 16bit이상으로 확보가 가능하다고 판단되니 그런 구조의 종류가 255개 안쪽이라면 가장 1번째 바이트를 구조체 식별코드로 두고 한다면 이 방법을 전부 적용할수 있으리라 생각됩니다.
무슨 말인지 잘 이해가 안되면 ironbow@hanmail.net 으로 메일을 주시거나 MSN:ironbow@hotmail.com 으로 연락주시기 바랍니다.
음~ 코드 몇개를 예제로 메일 줘보세요. 제가 인코딩(?)해서 드리겠습니다.
푸는 방법도 포함해서 답장을 드릴테니 그 방법으로 디코딩을 해보세요.
행복하세요~

ihavnoid의 이미지

음.. 16바이트, 즉 128비트를 확보해 줘야 하니....
영문 백여바이트에서 1비트씩만 잘라내면 압축 가능하겠군요...
즉, 7바이트마다 8개의 영문자를 집어넣기만 하면 되겠습니다...

대충 가장 간편한 방법을 생각해보면요...
일단 영문 8바이트-> 7바이트로 압축하는 루틴을 만들고요...

일단 struct의 구조를 바꿔서... H parameter을 앞에, A parameter를 뒤에 배치하도록 하고요...
H parameter들은 그냥 전송하도록 하고... A parameter의 모든 바이트들은 압축을 쭉 해주면 되겠죠...

풀어줄 때도 같은 방법으로 하고요...

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

kaos의 이미지

답변감사합니다.

그런데 구조를 미리 정의해 놓을수가 없어서 구조체를 사용하지 못하고 있습니다.

현재 사용되는 구조는 한 4가지 정도 되는데 앞으로 어떤게 더 쓰일지 몰라서
미리선언하는건 좀 어렵습니다.

이럴경우는 어떻게 해야 할까요..?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.