구조체 기본적인건데요..

gugudan의 이미지

class CAAA
{
int bbb;
char chTemp[100];
int aaa;
}AAA;

이랬을때 sizeof(CAAA)===> 108..
그런데 chTemp의 char 데이타 길이가 일정하지 않습니다.
즉 저 객체안에 있는
chTemp="school"이라는 단어가 들어있을때..
실질적인 길이는 16바이트입니다.

전 저 16byte의 크기를 알고 싶은데.. 방법이 없나요?

그리고 만일 16byte의 크기를 구했다면..이걸
unsigned char chAAA[100];

chAAA변수에 값을 세팅을 하고 싶습니다.

만일 위의 chTemp의 값이 dog라는 값이 있으면..
숫자4바이트+dog+숫자4바이트가 되는거고
만일 위의 chTemp의 값이 school이라는 값이 있으면..
숫자4바이트+school+숫자4바이트가 되는거고

이렇게 할려고 합니다.

chadr의 이미지

char형은 1바이트이므로 strlen(tmp.chTemp)의 리턴값을 사용하셔도 됩니다.

아니면 다음과 같이 직접 구하셔도 되구요 ㄱ-

int len = strlen(tmp.chTemp);
int nSize = (&tmp.chTemp[len] - tmp.chTemp) / sizeof(char);

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

only2sea의 이미지

이미 char[100]에서 100바이트의 공간이 잡혀버렸기 때문에
sizeof로는 그런 값을 얻을 수 없습니다. 게다가 컴파일타임에 이미
답이 나와버립니다.

런타임 오버헤드는 있지만 관련된 것을 하나 만드신다면 가능은 합니다.
CAAA형 밖에 받아들이지 못합니다. 예를 들어 아래와 같은 형태입니다.

int sizeofCAAA(CAAA& t)
{ return 8+strlen(t.chTemp); }

그런데 왜 school 이 있을 때는 16바이트가 된다고 하셨는데
위와 같이 하면 14바이트 일테고, 마지막 null 문자까지 하면 15바이트일텐데요.
4byte alignment 생각하신다면 위의 4의 배수로 나타내주도록 소스를 고쳐야겠지요.

사실 저는 이것이 어디에 쓰이는지도 궁금합니다.

그리고 unsigned char chAAA[100]; 에 세팅한다는 것은 구조체를 바이트 형태로
다 집어넣으신다는 것인지, chTemp만 집어넣으신다는 것인지도 잘 모르겠네요.

만일 다 집어넣으신다면 되기는 합니다만 (특히 C++이라면) 별로 좋은 방법은 아닌 것 같고
크기도 108 바이트가 필요합니다. 꼭 바이트단위로 읽으실 계획이시라면 union을 쓰셔도
되고 포인터 변환을 쓰셔도 됩니다.

gugudan의 이미지

#pragma pack(1)
class CAAA
{
int bbb;
char chTemp[100];
int aaa;
}AAA;

저렇게 만들어 놓고 저 data의 내용을 패킷으로 보낼려고 합니다.
writen을 이용해서 보낼려고 하는데 총 패킷의 길이를 구해야 하는데
막상 구할려닌까 좀 애매해서 그런겁니다.

단순하게 8+strlen(chTemp)머 이런식으로 하면 할수야 있는데..
이건 아닌거 같고..
그래서 그런겁니다.

ㅡ,.ㅡ;;의 이미지

구조체? 클래스? 어쨋든.. 보내실려면.. 그냥크기(sizeof(CAAA))대로 보내시면됩니다.
가변적인 패킷처리를원하셨다면 strlen()로 string의 길이는당연히 구해집니다. 따라서 보내면되겠죠..
아마도 실패하셨다면 코딩이 잘못되었으리리봅니다.


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

댓글 달기

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