[英]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.