簡體   English   中英

C++ 中的 memcpy 不會將 u_int32_t 復制到 unsigned char*

[英]memcpy in C++ doesn't copy u_int32_t to unsigned char*

我在使用memcpy function 時遇到問題。

我需要創建一個包含三個部分的unsigned char數組:id、數據數組的大小、數據數組。 但我還不能做第一部分。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <string>

int main() {    
    u_int32_t OID;
    unsigned char *serialized;
    
    OID = (u_int32_t)5;
    
    serialized = new unsigned char[sizeof(u_int32_t)];
    
    memcpy(serialized, &OID, sizeof(u_int32_t));
    
    std::cout << "After inserting OID: <" << serialized << ">\n";
    
    memcpy(serialized, "test", sizeof(u_int32_t));
    
    std::cout << "After inserting \'test\': <" << serialized << ">\n";

}

此代碼生成的 output 是:

    After inserting OID: <> 
    After inserting 'test': <test>

我不明白為什么,在第一種情況下, memcpy不會將OID復制到serialized ,而在第二種情況下,它會正確復制字符串test

如果你能幫助我,那就太好了。

先感謝您。

解決方案

我在打印serialized時試圖獲得5號。 但這是不正確的。 最合適的是做這樣的事情:

u_int32_t answer;
memcpy(&answer, serialized, sizeof(u_int32_t));
std::cout << "Answer: <" << answer << ">\n";

感謝您的回答和評論!

ASCII 中的5不可打印,因為它是控制字符。 ASCII 表

您可以在下面嘗試,它會a預期打印。

OID = (u_int32_t)'a';

解決方案

我在打印serialized時試圖獲得5號。 但這是不正確的。 最合適的是做這樣的事情:

u_int32_t answer;
memcpy(&answer, serialized, sizeof(u_int32_t));
std::cout << "Answer: <" << answer << ">\n";

感謝您的回答和評論!

暫無
暫無

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

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