C++ C++;:将int转换为无符号字符
我声明了一个IP地址: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 =
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))不幸,我不能理解:(我没有解释哪一点