簡體   English   中英

如何從C中的void *緩沖區存儲和訪問整數和void *?

[英]How to store and access integers and void* from a void* buffer in C?

我是一個相對較新的C程序員,我有以下問題:

void someFunction(int sizeOfArg1, void* arg1, int sizeOfArg2, void* arg2)
{
    // Buffer to store sizeOfArg1, arg1, sizeOfArg2, arg2
    void* buffer = malloc(sizeof(int) + sizeof(int) + sizeOfArg1 + sizeOfArg2);

    // How to store variables into buffer and access again?
    ...
}

基本上,我想要做的是將someFunction的參數存儲到void *緩沖區中,稍后再次訪問它。 這包括存儲sizeOfArg1,arg1,sizeOfArg2和arg2。

這里,sizeOfArg1是arg1的字節大小,sizeOfArg2是arg2的字節大小。 arg1和arg2是void *指針。

對於單個變量,我知道你可以使用memcpy()或strlen()(如果參數是一個字符串)。 此外,如果所有參數都是單個定義的類型,我理解指針算法可用於存儲變量。 但是,我想要做的是稍后存儲和檢索每個值。

我試圖解決這個問題的原因是因為我需要將緩沖區傳遞給sendto()函數,以便通過UDP從客戶端向服務器發送一些信息。 sendto()函數接受void * buf參數。

我在網上查看了各種來源,其中指出由於對齊問題,無法使用void *上的指針算法,我無法從我看了幾個小時的來源中弄清楚如何解決這個問題。

任何幫助,將不勝感激。

請改用char緩沖區。

#include <stdint.h>  // uint32_t

void func(uint32_t size1, void *arg1, uint32_t size2, void *arg2) {

  uint32_t nsize1 = htonl(size1), nsize2 = htonl(size2);
  uint32_t size = sizeof(size1) + sizeof(size2) + size1 + size2;
  char *buf = malloc(size);

  memcpy(buf,                         &nsize1, sizeof(nsize1));
  memcpy(buf + sizeof(size1),         arg1,    size1);
  memcpy(buf + sizeof(size1) + size1, &nsize2, sizeof(nsize2));
  memcpy(buf + size - size2,          arg2,    size2);

  // sock and dest_addr need to come from somewhere
  sendto(sock, buf, size, 0, dest_addr, sizeof(dest_addr));

  free(buf);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM