[英]memcopy uint16_t to char* for UDP transport
我一直在用C進行UDP可靠傳輸。我有一個結構,格式如下:
struct packet
{
uint16_t cksum; /* Ack and Data */
uint16_t len; /* Ack and Data */
uint32_t ackno; /* Ack and Data */
uint32_t seqno; /* Data only */
char data[500]; /* Data only; Not always 500 bytes, can be less */
};
typedef struct packet packet_t;
然后,我調用一個函數,該函數返回一個名為htonheader(packet_t p)的char *。 該函數應該采用頭文件的所有部分,並使用適當的(htons / htonl)函數將其轉換為網絡格式。
char* htonheader(packet_t p)
{
printf("Converting Header to Network Format\n");
printf("Packet to convert:\n");
print_pkt(p);
char *head; // Converted header to return
uint16_t u16; // Used to hold converted values uint16_t
uint32_t u32; // Used to hold converted values uint32_t
u16 = htons(p.cksum);
printf("u16: %d\n",u16);
memcpy(head+0,&u16,sizeof(u16));
printf("Header with Checksum: %s\n",head);
u16=htons(p.len);
printf("u16: %d\n",u16);
memcpy(head+2,&u16,sizeof(u16));
printf("Header with Length: %s\n",head);
u32=htonl(p.ackno);
printf("u32: %d\n",u32);
memcpy(head+4,&u32,sizeof(u32));
printf("Header with Ack No: %s\n",head);
u32=htonl(p.seqno);
printf("u32: %d\n",u32);
memcpy(head+8,&u32,sizeof(u32));
printf("Header with Seq No: %s\n",head);
return head;
}
當我發送帶有消息的數據包時,以下是以下輸出:
Converting Header to Network Format
Packet to convert:
Cksum - 0
Len - 13
Ackno - 0
Seqno - 0
Data - test message
u16: 0
Header with Checksum:
u16: 3328
Header with Length:
u32: 0
Header with Ack No:
u32: 0
Header with Seq No:
Generated Header:
如果我正確編碼了memcpy,它應該顯示帶有一些數據的標頭。 相反,它什么也不顯示,因此當我發送帶有消息的標頭時,僅發送一條消息。 你們可以讓我對為什么它不起作用有一些見解嗎? 我嘗試查看許多類似的memcpy示例,甚至是UDP實例,但仍然找不到問題。 謝謝。
好的,它不是字符串。 這是一堆整數值,您將它們填充到char *
引用的某些內存中。
其次,你需要實際分配的一些內存head
,以點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.