char* 如何读取十六进制的这个整数?它在 ostream::write() 中是如何工作的
How does char* read this integer in hexadecimal? How is it working in ostream::write()?
#include <iostream>
using namespace std;
int main(){
int x = 0x414243;
cout.write( (char*)&x, 1);
cout.write( ((char*)&x) + 1, 2);
}
输出为:
中央广播电视总会
我不明白(char*(和正在用x做什么。
http://www.asciitable.com/看这个 ASCII 表,在我看来 write(( 正在用八进制写 141、142、143......反过来!
char* 是如何做到这一点的?
大
写'C'
、'B'
和'A'
的ASCII代码是67、66和65,即0x43、0x42和0x41。
看起来您的计算机是 32 位小端序,因此 0x00414243
的八位字节(为了清楚起见,为了清楚起见,两个额外的零,以完成 32 位int
(放置在内存中,如下所示:
0x43, 0x42, 0x41, 0x00
这表示以 null 结尾的字符串"CBA"
。
请注意,在大端硬件上,八位字节将按相反的顺序放置,即
0x00, 0x41, 0x42, 0x43
因此,将此数字解释为以 null 结尾的字符串将产生空输出。
平台上的整数类型很可能不止一个字节或char
。
由于它的长度超过一char
,因此可以先使用最低有效字节(也称为小端序(或最高有效字节优先(大端序(进行排序。
表达式 (char *) x
是指向整数的第一个字符的指针。
因此,它可以是0x00或0x43,具体取决于平台的字节顺序(假设x
长度为 4 个字节(。
相关文章:
- ostream过载时的缓冲区冲洗
- 需要从 istream 和 ostream 派生 iostream
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- "ostream &os"有什么用?
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++表达SFINAE和ostream操纵器
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- write() 和 read() 中几乎没有混淆
- OpenCV-contrib/Python/Windows:Tracker.write() 在 matrix_wrap.
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 逗号在重载 ostream 和 istream 在结构中分开
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- char* 如何读取十六进制的这个整数?它在 ostream::write() 中是如何工作的
- 在什么情况下 ostream::write 或 ostream::operator<< 会失败?
- std::ostream::write有什么限制吗
- ostream::write实际写入了多少字节