[완료]비트 데이터 처리 효율성 질문입니다.

jaejong2의 이미지

처음 질문 올려봅니다.

여러가지 검색을 해 보았지만 만족할만한 주제를 찾지 못했네요.

각 비트별로 일정하게 구분되지 않은 자리수에 의한 데이터 처리방법입니다.

0.3초 단위로 최대 약 800Byte정도의 메시지가 수신됩니다.

이 800Byte의 메시지중 데이터 구조가 byte단위로 딱 떨어지지 않아서 애를 먹고 있습니다.

프로토콜은 아래와 같은 메시지와 하위 메시지로 구성되어 있습니다.

start~end
0~8 value1
8~18 value2
18~40 value3
40~45 value4-이하 반복횟수
46~52 value4
53~164 subPacketID
165~214 subPacketID
215~55 subPacketID
+112 subPacketID_1
+49 subPacketID_1
+40 subPacketID_1
.
.
.
.
이런 형식의 메시지코드가 여러개 됩니다.

시작비트를 기준으로 각각 버퍼를 두고 짤라서 하위패킷을 처리하는 형태로 하였는데.

버퍼사용이 너무 많아지고 점유율도 치솟네요.

처리되는데 있어 가장 효율적인 방법론은 무엇이 있을지 여쭤봅니다.

비트단위 처리를 많이 하시는 분들의 좋은 의견 바랍니다.

익명 사용자의 이미지


이유가 여러가지가 있으시겠지만, 비트단위를 사용하시는 것은 아무래도 데이터 용량을 줄여보기 위해서 사용하시는 것이 아닌가 싶은데요?

제가 아는 선에서 일반적으로 큰 데이터 압박이 없다면, 각 데이터 단위는 byte 단위로 짜르고, 남는 부분은 reserved 영역으로 묶어서,

union 과 bit operation 또는 bit mask 등 으로 처리하는 것으로 알고 있습니다.

해당 프로토콜을 그냥 사용하려면, endian 과 bit operation 등에서 타 플랫폼(cisc/risc, mmu 차이 등)에서도 좀 고전을 면치 못할 것 같은데요.

아, 질문자가 원하는 좋은 의견을 드리지 못해 안타깝습니다.

저도 공부를 더 해보아야 겠습니다.

jaejong2의 이미지

일단 프로토콜이 정해져 있는 상태라 바꿀수가 없네요..^^*

데이터량이 많은것두 아닌데 구형이라 따라야겠지요.

답변 감사합니다.^^*

익명 사용자의 이미지

값을 잘라 쓰기 위해서 시작주소로 만들고 복사하고 읽고를 반복하시는 거라면..
bit flag로 그냥 구조체 선언해서 매핑해서 쓰세요 -0-

0~8 value1
8~18 value2
18~40 value3
40~45 value4-이하 반복횟수 <-여기까지는 헤더 같고.. 나머진 data인가요? 헤더는 4byte 나 8byte 정렬 해 버리면 좀더 좋아보일듯 한데요..
46~52 value4
53~164 subPacketID
165~214 subPacketID
215~55 subPacketID
+112 subPacketID_1
+49 subPacketID_1
+40 subPacketID_1

jaejong2의 이미지

반복횟수 아래부터는 데이터 맞습니다.

그 아래 서브패킷이 있어서 요 모냥새가 여러개 또 들어가 있는 형태죠.

말씀하신것처럼 서버패킷은 bit flag구조체 사용해서 사용하구요.

큰덩어리에서 작은 덩어리 자르는게 귀찮아져서 더 간결한 방법을 찾구 있어요.

SendPacket할때도 저런 형식으로 만들어서 보내야 하는지라~~~

작성하다보니깐 엄청 귀찮아져서요..^^

답변 감사합니다.~~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.