Cout删除了(未签名的字符)指针,给了我意外的结果
cout derefernced (unsigned char) pointers, gives me unexpected results
我需要窥视声明的未签名炭指针中的内容,我将问题减少到了这个简短的示例
#include<iostream>
int main (int argc, char *argv[])
{
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl;
}
我期望此输出:缓冲区= 8
,但我得到了缓冲区=
空白,这让我发疯,甚至没有任何价值!
我实际上如何处理它:
#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 中的此示例构建一个字节有效载荷数据包,我需要它是 Pointer 。这就是为什么我实际上将问题与" C "一起标记为" C"的原因,因为问题的核心也很关注C。但是我发现自己拒绝了这一点!我知道" cout"answers" new"是C 文字,但与问题无关!
没有所有的编码问题,我的问题只是 unsigned char ,那么如果它读为常规char,with cout!P>
我说我希望它是buffer = 8
,因为未签名的char是一个字节整数。
谢谢大家
如果我们稍微将您的示例扩展到此:
int main(int argc, char *argv[]) {
unsigned char * buffer = new unsigned char;
*buffer = 8;
std::cout << "buffer = [" << (*buffer) << "]n";
}
输出为
buffer = ]
ASCII CHAR 8表示Backspace,并且已经核定了开场的[
。请注意,您不需要演员con - *buffer
是一个未签名的char。
如果您希望它具有字符'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
变量中的数值值,因此希望<<
报告整数值而不是将其作为字符流式传输,请使用cast。
int main(int argc, char *argv[]) {
unsigned char buffer = 56;
std::cout << "buffer = [" <<static_cast<unsigned int>(buffer) << "]n";
}
'8'
是字符8。 8
只是一个看不见的字符的代码。
尝试编写*buffer = 48;
,并猜测为什么基于此表的输出为"缓冲区= 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'
,因为有些人可能以为我的意思是
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用指向整数的指针时获得不同的结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- C++数组和指针的大小的结果
- C++ 函数指针的计算结果为 1
- 对象指针打印结果以相反的顺序进行
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- 插入指针数组会删除上一个结果
- 打印整数指针元素时的结果不同
- 错误:通过指针显示重复的结果
- 当应该删除其目标时,为什么此智能指针给出正确的结果
- 为什么我得到这个字符指针的不同结果?
- 在我的C++链表实现中取消引用节点指针,给出意想不到的结果
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- Cout删除了(未签名的字符)指针,给了我意外的结果
- 为什么无法将 std::bind 的结果分配给函数指针
- 如何否定MEM_FN创建的功能指针的结果
- 返回指向操作+的结果的指针
- 为什么在同一类中使用不同的(共享_ptr和正常)指针构造函数,我会得到不同的结果