簡體   English   中英

在C ++中將int轉換為字節數組

[英]Cast int as byte array in C++

我正在嘗試使用實現安德魯·格蘭特建議的LSB查找方法來回答這個問題: 設置的最低有效位的位置

但是,它導致了分段錯誤。 這是一個展示問題的小程序:

#include <iostream>

typedef unsigned char Byte;

int main()  
{  
    int value = 300;  
    Byte* byteArray = (Byte*)value;  
    if (byteArray[0] > 0)  
    {  
        std::cout<< "This line is never reached. Trying to access the array index results in a seg-fault." << std::endl;  
    }  
    return 0;  
}  

我究竟做錯了什么?
我已經讀過在C ++中使用'C-Style'強制轉換是不好的做法。 我應該使用reinterpret_cast<Byte*>(value)嗎? 但是,這仍會導致分段錯誤。

用這個:

(Byte*) &value;

您不希望指向地址300的指針,您想要指向存儲300的指針。 因此,您使用address-of運算符&來獲取value的地址。

雖然Erik回答了你的整體問題,但作為一個后續內容我會強調說 - 是的,應該使用reinterpret_cast而不是C風格的演員。

Byte* byteArray = reinterpret_cast<Byte*>(&value);

該行應為:Byte * byteArray =(Byte *)&value;

你不應該把(void *)放在它前面。

-燧石

char *array=(char*)(void*)&value;

基本上,您將指針指向字符串的開頭並將其重新轉換為指向字節的指針。

@Erik已經解決了你的主要問題,但你仍然有一個微妙的問題。 如果您只是尋找最不重要的 ,則根本不需要使用演員。

int main()
{
    int value = 300;       
    if (value & 0x00000001)       
    {           
        std::cout<< "LSB is set" << std::endl;
    }
    return 0;
}

暫無
暫無

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

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