我想了解如何在 C++ 中读取二进制文件。\n我的代码:
\n\nint main() {\n ifstream ifd("input.png",ios::binary |ios::ate);\n int size = ifd.tellg();\n ifd.seekg(0, ios::beg);\n vector<char> buffer;\n buffer.reserve(size);\n ifd.read(buffer.data(), size);\n\n cout << buffer.data();\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我认为如果我计算缓冲区,我会得到二进制结果,但事实并非如此。
\n\nMy output is: \xcb\x99\xc5\x98\xcb\x99\xc3\xa16Exif
如果我读取文本文件,它会以正常形式而不是二进制形式显示文本。显然我的逻辑不正确。\n我如何将文件读取到缓冲区,以便它包含二进制值?\nP.s. 我这样做是为了实现 Shannon-Fano 算法,因此如果有人对读取二进制文件有任何建议,我将不胜感激。
\n我怎样才能插入字符 ACTER成字符串 1个字符后到底是什么?
我需要插入'|' 在每个其他角色之后进入字符串.
换句话说(C++):"Tokens all around!"
变成:( "T|o|k|e|n|s| |a|l|l| |a|r|o|u|n|d|!"不,那不是数组)
谢谢
我只是尝试使用~运算符在C++中进行按位补码:
例如:
NOT 0101
--------
1010
Run Code Online (Sandbox Code Playgroud)
所以在下面的代码中,我期待得到1010但我得到负数.虽然我用unsigned类型定义值,但是怎么可能?
#include <iostream>
#include <stdio.h>
#include <string>
#include <bitset>
using namespace std;
int tob(int num) {
if (num == 0)
return 0;
return (num % 2) + 10*tob(num/2);
}
long unsigned int tol(string st) {
long unsigned int num = bitset<100>(st).to_ulong();
return num;
}
int main()
{
unsigned int x = tol("0101");
unsigned int z = ~x;
printf("%10d (decimal %u)\n", tob(z), z);
// -110 (decimal -6)
cout << …Run Code Online (Sandbox Code Playgroud) 我有这样的事情:
template<class T>
class SomeClass {
public:
typedef std::make_unsigned<T> unsigned_t;
unsigned_t maxBinBitRep_ { - 1 };
};
int main() {
// Okay prints out 255 as expected.
SomeClass<unsigned char> unsignedChar; // unsigned version
// New to `make_unsigned<>` but should print 255.
//std::cout << unsignedChar.maxBinBitRep << std::endl;
// Should be printing the same as above however it's printing: 4294967295
SomeClass<char> signedChar;
// same as above.
//std::cout << signedChar.maxBinBitRep << std::endl; // signed version
std::cout << "/nPress any key and enter to …Run Code Online (Sandbox Code Playgroud) long double出于某些原因,我必须打印数字的二进制表示.我想看到它保留在计算机内存中的确切格式.
我经历了以下问题,其中一个union是解决方案.因为float,备用数据类型unsigned int都是32位.因为double,unsigned long int两者都是64位.但是long double,它是96位/ 128位(取决于平台),它没有类似的等效内存消费者.那么,解决方案是什么?
它被标记为问题的副本如何打印(使用cout)数字存储在内存中的方式?!
真的是吗?提到的问题是关于整数的问题和接受的解决方案,它bitset只是截断了浮点部分.我的主要观点是浮点表示,它与该问题的内容无关.
我想输出一个int32位二进制格式.循环和转移我唯一的选择?
c++ ×6
binary ×3
bitset ×1
c++11 ×1
file ×1
iostream ×1
long-double ×1
long-integer ×1
outputstream ×1
string ×1
templates ×1
tokenize ×1
unsigned ×1