簡體   English   中英

如何從char緩沖區讀取到unsigned long和short

[英]How to read from char buffer into unsigned long and short

編輯:我不確定這段代碼是否符合我的想法。 有人能告訴我如何測試嗎? 即我的主函數中的緩沖區應該是什么樣的? 我假設緩沖區具有以下順序類型(16 位)、長度(32 位)的兩個字段的數據。 我假設緩沖區是從文件中讀入的,並且每個字段都由一個空格分隔。 這些字段以網絡字節順序存儲,當我讀取它們時,我必須將它們轉換回主機字節順序。

我期望代碼將從文件中讀取內容(應該以網絡字節順序)並以主機字節順序顯示內容。 我對類型轉換和文件中的網絡字節順序有點困惑,所以我不知道用什么值來測試它。 另外,我不確定我的代碼是否正確編寫,做這種事情或對此類轉換有更多了解的人可以告訴我我的代碼是否正確嗎?

這是代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printRecords(char *buffer)
{
     unsigned int recordType;
     unsigned long recordLength;
     char *data;
     char *index;

     if (!buffer)
         printf("Empty buffer\n");

     while(*buffer)
     {
        memcpy(&recordType,(const void *) buffer,2);
        buffer += 3;

        recordType = ntohs(recordType);
        printf("Record type normal: %u\n",recordType);

        memcpy(&recordLength,(const void *) buffer,4);
        buffer += 5;
        recordLength = ntohl(recordLength);
        printf("Record Length normal: %l\n",recordLength);

        break;
     }
}

void main()
{
     char * buffer = "0000000000000001 00000000000000000000000000000001";
     printRecords(buffer);

}
char *buffer = malloc(sizeof(buf));

sizeof 表示“buf 類型的大小”,即指向char 的指針的大小; 你可能想要

malloc(strlen(buf) + 1); /* 1 for trailing '\0' */

然后您將字節的值誤認為是將它們轉換為字符串:“256”是字節 '2' 后跟字節 '5' 和 '6' -- '2' 不等於 2,'5' 不等於到 5 等。您正在談論的 256 是 00000001 00000000(嘗試將字節轉儲到標准輸出,您會看到)。

此外,recordType 應該是 uint16_t 類型,而不是未簽名——你永遠不會太偏執。

編輯:atoi 需要一個指向 char 的指針,如

atoi("123")

不是指向 int 的指針!

暫無
暫無

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

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