C++ 无法打印号码 问题
我没有从一个简单的cout得到任何输出,而printf将始终打印数字:C++ 无法打印号码 问题,c++,pointers,printf,cout,C++,Pointers,Printf,Cout,我没有从一个简单的cout得到任何输出,而printf将始终打印数字: std::cout << variableuint8; // prints nothing printf("%u", variableuint8); // prints the number 环境 开发机器: OS X 10.6.8 编译器LLVM1.7 代码3.2.6 试验机: OS X 10.6.8 将std::cout它将字符作为字符打印 #include <iostream>
std::cout << variableuint8; // prints nothing
printf("%u", variableuint8); // prints the number
环境
- 开发机器:
- OS X 10.6.8
- 编译器LLVM1.7
- 代码3.2.6
- 试验机:
- OS X 10.6.8
- 将
std::cout它将字符作为字符打印
#include <iostream>
int main() {
unsigned char c = 0x41;
std::cout << c << std::endl;
return 0;
}
#包括
int main(){
无符号字符c=0x41;
std::cout您是否尝试将其转换为int,以避免依赖于实现所使用的字符类型:
std::cout << (int)variableuint8;
std::cout这就是问题所在。我的示例输出不正确,您是对的-我已将其更改为演示我实际遇到的问题。这不是一个真正的问题。示例程序应打印42
(*
)我在我的例子中犯了一个错误——肯尼是正确的。我用我正在处理的实际值修改了我的例子。很抱歉,混淆了。是的,这是正确的修复。在我的例子中,我投下了代码>(UTIN 16)< /C>。但是效果是一样的。我只想问下面的行是用C++定义的吗?(设备化*)somerandomdata;`如果对齐不是DeviceNotification
所需的对齐,那么这行不是调用了未定义的行为吗?@AraK这些都在x86上运行,这允许未对齐的内存访问。它们可能会慢一些,因为它们可能需要两次读取内存总线才能获得跨边界拆分的值,但它可以工作很好。你可以做一些实验来证明这一点-如果你做了,让我们知道是否有速度差异。谢谢,这很有趣。编写这样一个微型基准测试会很好。即使在有严格对齐要求的机器上,这些都倾向于应用于基本类型,而不是结构。特别是,访问字节大小成员(例如UInt8 len
)是安全的。这样会更简单
#include <iostream>
int main() {
unsigned char c = 0x41;
std::cout << c << std::endl;
return 0;
}
std::cout << (int)variableuint8;