C++ C++;:将int转换为无符号字符

C++ C++;:将int转换为无符号字符,c++,int,C++,Int,我声明了一个IP地址: int test_ip = (192) | (168<<8) | (33<<16) | (255<<24); 使用VS 2010 C++调试器对最后表达式进行求值。此表达式的调试器输出: 0xff21a8c0 <Bad Ptr> 0xff21a8c0 我做错了什么?为什么Ptr不好?尝试c样式转换会给您带来未定义的行为,因为指针类型是不相关的。最好是使用整数的静态强制转换,模256 unsigned char c =

我声明了一个IP地址:

int test_ip = (192) | (168<<8) | (33<<16) | (255<<24);

使用VS 2010 C++调试器对最后表达式进行求值。此表达式的调试器输出:

0xff21a8c0 <Bad Ptr>
0xff21a8c0

我做错了什么?为什么Ptr不好?

尝试c样式转换会给您带来未定义的行为,因为指针类型是不相关的。最好是使用整数的静态强制转换,模256

unsigned char c = static_cast<unsigned char>(test_ip % 256)
unsigned char c=static\u cast(测试ip%256)
这将是安全的,因为标准保证无符号字符的大小为8位

一旦您将此转换为unsigned char,就将其地址作为指针&c


如果您需要test_ip的其他部分,请结合整数除法等。在进行转换时,请注意不要使无符号字符溢出。

尝试c样式转换将导致未定义的行为,因为指针类型是不相关的。最好是使用整数的静态强制转换,模256

unsigned char c = static_cast<unsigned char>(test_ip % 256)
unsigned char c=static\u cast(测试ip%256)
这将是安全的,因为标准保证无符号字符的大小为8位

一旦您将此转换为unsigned char,就将其地址作为指针&c


如果您需要test_ip的其他部分,请结合整数除法等。在进行转换时,请注意不要使无符号字符溢出。

尝试c样式转换将导致未定义的行为,因为指针类型是不相关的。最好是使用整数的静态强制转换,模256

unsigned char c = static_cast<unsigned char>(test_ip % 256)
unsigned char c=static\u cast(测试ip%256)
这将是安全的,因为标准保证无符号字符的大小为8位

一旦您将此转换为unsigned char,就将其地址作为指针&c


如果您需要test_ip的其他部分,请结合整数除法等。在进行转换时,请注意不要使无符号字符溢出。

尝试c样式转换将导致未定义的行为,因为指针类型是不相关的。最好是使用整数的静态强制转换,模256

unsigned char c = static_cast<unsigned char>(test_ip % 256)
unsigned char c=static\u cast(测试ip%256)
这将是安全的,因为标准保证无符号字符的大小为8位

一旦您将此转换为unsigned char,就将其地址作为指针&c


如果您需要测试ip的其他部分,则结合整数除法等。在进行转换时,请注意不要使无符号字符溢出。

您的转换最好通过in_addr数据类型完成:

这是windows in_addr,因此如果您想在linux上使用它,您必须使用其他名称重新声明它

像这样:

in_addr address;
address.S_addr = (192) | (168<<8) | (33<<16) | (255<<24);
输入地址;

address.S_addr=(192)|(168您的转换最好通过in_addr数据类型完成:

这是windows in_addr,因此如果您想在linux上使用它,您必须使用其他名称重新声明它

像这样:

in_addr address;
address.S_addr = (192) | (168<<8) | (33<<16) | (255<<24);
输入地址;

address.S_addr=(192)|(168您的转换最好通过in_addr数据类型完成:

这是windows in_addr,因此如果您想在linux上使用它,您必须使用其他名称重新声明它

像这样:

in_addr address;
address.S_addr = (192) | (168<<8) | (33<<16) | (255<<24);
输入地址;

address.S_addr=(192)|(168您的转换最好通过in_addr数据类型完成:

这是windows in_addr,因此如果您想在linux上使用它,您必须使用其他名称重新声明它

像这样:

in_addr address;
address.S_addr = (192) | (168<<8) | (33<<16) | (255<<24);
输入地址;

address.S_addr=(192)|(168可能需要将其作为
无符号字符*
传递给 一些协议。在这种情况下,你不能直接施法,因为
int
的位表示不一定是 协议需要。您必须逐字节提取它,就像 您构建了它,将字节放在一个
无符号字符中

buffer.

您可能需要将其作为
无符号字符*
传递给 一些协议。在这种情况下,你不能直接施法,因为
int
的位表示不一定是 协议需要。您必须逐字节提取它,就像 您构建了它,将字节放在一个
无符号字符中

buffer.

您可能需要将其作为
无符号字符*
传递给 一些协议。在这种情况下,你不能直接施法,因为
int
的位表示不一定是 协议需要。您必须逐字节提取它,就像 您构建了它,将字节放在一个
无符号字符中

buffer.

您可能需要将其作为
无符号字符*
传递给 一些协议。在这种情况下,你不能直接施法,因为
int
的位表示不一定是 协议需要。您必须逐字节提取它,就像 您构建了它,将字节放在一个
无符号字符中


缓冲区。

您的错误是将IP地址转换为指针,而不是
test\u IP
的地址。是否确实要查找
inet\u ntoa
?您的错误是将IP地址转换为指针,而不是
test\u IP
的地址。是否确实要查找
inet\u ntoa
?您的错误您是否将IP地址转换为指针,而不是
test\u IP
的地址。是否确实要查找
inet\u ntoa
?错误是您将IP地址转换为指针,而不是
test\u IP
的地址。是否确实要查找
inet\u ntoa
?不幸的是,我无法理解ND:(我没有解释好哪一个?)你是指:<代码>(Uy-Char *)和TestIOIP ?你错过了静态Casic的类型参数,但是这是一个合理的建议。@ GooMangNo,他不打算使用C风格的CaskPrue((type)值),但是C++静态Casic(StistalPype CVar(value))不幸,我不能理解:(我没有解释哪一点