我需要查看声明的unsigned char指针内部的内容,我将问题简化为这个简短的例子
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl;
}
我期待这个输出:buffer = 8
但我明白了 buffer =
空白,这让我疯了,甚至没有任何价值!!!
我实际上是如何处理的:
#include<iostream>
typedef unsigned char uint8_t;
int main (int argc, char *argv[])
{
uint8_t * buffer = new uint8_t ;
*buffer = 8;
std::cout << "buffer = " << (int) (*buffer) << std::endl;
}
我在ns3中使用此示例, buffer 构造一个字节的有效负载数据包,我需要它是指针。 这就是我将问题标记为&#34; C&#34;以及&#34; C ++&#34;,因为该问题的核心也与C有关。但我发现自己被投票支持了!我知道&#34; cout&#34;和&#34;新&#34;是c ++文字,但它与问题无关!!
没有所有问题的编码问题,我的问题就是 unsigned char 然后如果它作为cout的常规字符读取! !!
我说我希望它是buffer = 8
,因为unsigned char是一个字节的整数。
谢谢你们,因为你们让我注意到cout正在处理它,就好像它是一个普通的char,尽管它对我来说是预期的。
答案 0 :(得分:3)
如果我们稍微扩展您的示例:
int main(int argc, char *argv[]) {
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = [" << (*buffer) << "]\n";
}
输出
buffer = ]
ASCII char 8表示退格,它已经开启了[
。
请注意,您不需要将强制转换为无符号字符 - *buffer
是无符号字符。
如果您希望它具有字符'8'
,则需要将其内容设置为8。
不要忘记delete
new
。
int main(int argc, char *argv[]) {
unsigned char * buffer = new unsigned char;
*buffer = '8'; //<---- see the single quotes?
std::cout << "buffer = [" << (*buffer) << "]\n";
delete buffer;
}
带输出
buffer = [8]
当然,我们并不需要这些指针:
int main(int argc, char *argv[]) {
unsigned char buffer = '8';
std::cout << "buffer = [" << buffer << "]\n";
}
如果你坚持使用原始字符代码:
int main(int argc, char *argv[]) {
unsigned char buffer = 56;
std::cout << "buffer = [" << buffer << "]\n";
}
修改强>
如果您想知道的是buffer
变量中的数值是什么,因此希望<<
报告整数值而不是将其作为字符流式传输,请使用强制转换。
int main(int argc, char *argv[]) {
unsigned char buffer = 56;
std::cout << "buffer = [" <<static_cast<unsigned int>(buffer) << "]\n";
}
答案 1 :(得分:1)
'8'
是角色8。
8
只是一个不可见的角色代码。
尝试编写*buffer = 48;
并猜测为什么输出是&#34;缓冲区= 0&#34;基于此table。
答案 2 :(得分:0)
刚刚发现 unsigned() :
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << unsigned(*buffer) << std::endl;
}
它在我的问题buffer = 8
中提供了我想要的输出
这不是buffer = '8'
,有些人可能认为我的意思是