편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.11.22

    c언어 포인터 질문드립니다


    struct Buffer

    {

    int head;
    
    int tail;
    
    unsigned char Buffer[1024];
    
    int (*count)(struct Buffer * p);
    

    }; struct Buffer Receiver, Sender;

    int Count(struct Buffer *p)

    {

    return p->head >= p->tail?  p->head - p->tail : 1024 - p->head + p->tail;
    

    }

    void Net()

    {

    unsigned char Buffer[1024] = {0};

    if(Receiver.count(&Receiver) >=4)

    {

    int length = ((int)Buffer);

        if(Receiver.count(&Receiver) >= length)
    

    }

    }

    &Receiver 이 부분하고 int length = ((int)Buffer); 여기를 어떻게 해석하면 되나요?

  • 프로필 정영훈님의 편집
    날짜2018.11.21

    c언어 포인터 질문드립니다


    struct Buffer
    
    {
    
        int head;
    
        int tail;
    
        unsigned char Buffer[1024];
    
    
    
        void (*back)(struct Buffer *p, unsigned char c);
    
        unsigned char (*front)(struct Buffer *p);
    
        int (*count)(struct Buffer * p);
    
        unsigned char (*at)(struct Buffer *p, int index);
    
        void (*remove)(struct Buffer *p, int count);
    
    };
    
    
    
    
    struct Buffer Receive, Send;
    
    
    
    void Back(struct Buffer *p, unsigned char c)
    
    {
    
        p->Buffer[p->head++] = c;
    
        p->head %= 1024;
    
    }
    
    
    
    unsigned char Front(struct Buffer *p)
    
    {
    
        if(p->count(p)>0)
    
        {
    
            unsigned char c= p->Buffer[p->tail++];
    
            p->tail %=1024;
    
            return c;
    
        }
    
        return 0;
    
    }
    
    
    
    int Count(struct Buffer *p)
    
    {
    
        return p->header >= p->tail?  p->head - p->tail : 1024 - p->head + p->tail;
    
    }
    
    
    
    unsigned char At(struct Buffer *p, int index)
    
    {
    
        if(p->count(p)>index)
    
        {
    
            index += p->tail;
    
            return p->Buffer[index % 1024];
    
        }
    
        return 0;
    
    }
    
    
    
    void Remove(struct Buffer *p, int count)
    
    {
    
        int cnt = p->count(p);
    
        cnt = (cnt>count)? count : cnt;
    
    
    
        p->tail += cnt;
    
        p->tail %= 1024;
    }
    
    void Net()
    
    {
    
        int i;
    
        unsigned char Buffer[1024] = {0,};
    
        if(Receive.count(&Receive) >= 4)
        {
            int length = *((int*)Buffer);
            if(Receive.count(&Receive) >= length)
            {
                for(; i<length; i++){
                    if(i & 0x1) Buffer[i>>1] |= (Receive.at(&Receive, i) << 8) & 0xff00;
                    else        Buffer[i>>1] |=  Receive.at(&Receive, i) & 0x00ff;
                }
                Receive.remove_front(&Receive, length);
             }
         }
    }
    

    마지막 Net() 함수 해석이 잘 안되는데 알려주시면 감사하겠습니다ㅠ

  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.11.21

    c언어 포인터 질문드립니다


    struct Buffer

    {

    int head;
    
    int tail;
    
    unsigned char Buffer[1024];
    
    
    
    void (*back)(struct Buffer *p, unsigned char c);
    
    unsigned char (*front)(struct Buffer *p);
    
    int (*count)(struct Buffer * p);
    
    unsigned char (*at)(struct Buffer *p, int index);
    
    void (*remove)(struct Buffer *p, int count);
    

    };

    struct Buffer Receive, Send;

    void Back(struct Buffer *p, unsigned char c)

    {

    p->Buffer[p->head++] = c;
    
    p->head %= 1024;
    

    }

    unsigned char Front(struct Buffer *p)

    {

    if(p->count(p)>0)
    
    {
    
        unsigned char c= p->Buffer[p->tail++];
    
        p->tail %=1024;
    
        return c;
    
    }
    
    return 0;
    

    }

    int Count(struct Buffer *p)

    {

    return p->header >= p->tail?  p->head - p->tail : 1024 - p->head + p->tail;
    

    }

    unsigned char At(struct Buffer *p, int index)

    {

    if(p->count(p)>index)
    
    {
    
        index += p->tail;
    
        return p->Buffer[index % 1024];
    
    }
    
    return 0;
    

    }

    void Remove(struct Buffer *p, int count)

    {

    int cnt = p->count(p);
    
    cnt = (cnt>count)? count : cnt;
    
    
    
    p->tail += cnt;
    
    p->tail %= 1024;
    

    }

    void Net()

    {

    int i;
    
    unsigned char Buffer[1024] = {0,};
    
    if(Receive.count(&Receive) >= 4)
    {
        int length = *((int*)Buffer);
        if(Receive.count(&Receive) >= length)
        {
            for(; i<length; i++){
                if(i & 0x1) Buffer[i>>1] |= (Receive.at(&Receive, i) << 8) & 0xff00;
                else        Buffer[i>>1] |=  Receive.at(&Receive, i) & 0x00ff;
            }
            Receive.remove_front(&Receive, length);
         }
     }
    

    }

    마지막 Net() 함수 해석이 잘 안되는데 알려주시면 감사하겠습니다ㅠ