相关疑难解决方法(0)

结构填料和包装

考虑:

struct mystruct_A
{
   char a;
   int b;
   char c;
} x;

struct mystruct_B
{
   int b;
   char a;
} y;
Run Code Online (Sandbox Code Playgroud)

结构的尺寸分别为12和8.

这些结构是填充还是包装?

什么时候进行填充或包装?

c struct structure packing padding

189
推荐指数
6
解决办法
25万
查看次数

操作后恢复std :: cout的状态

假设我有这样的代码:

void printHex(std::ostream& x){
    x<<std::hex<<123;
}
..
int main(){
    std::cout<<100; // prints 100 base 10
    printHex(std::cout); //prints 123 in hex
    std::cout<<73; //problem! prints 73 in hex..
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在从函数返回后,是否有任何方法可以将cout的状态"恢复"到原来的状态?(有点像std :: boolalpha和std :: noboolalpha ..)?

谢谢.

c++ iostream

91
推荐指数
7
解决办法
3万
查看次数

在C中打印十六进制字符

我正在尝试读取一行字符,然后打印出字符的十六进制等效值.

例如,如果我有一个字符串,"0xc0 0xc0 abc123"前两个字符是c0十六进制,其余字符是abc123ASCII,那么我应该得到

c0 c0 61 62 63 31 32 33
Run Code Online (Sandbox Code Playgroud)

但是,printf使用%x给了我

ffffffc0 ffffffc0 61 62 63 31 32 33
Run Code Online (Sandbox Code Playgroud)

如何在不使用的情况下获得我想要的输出"ffffff"?为什么只有c0(和80)有ffffff,但没有其他字符?

c printf hex

88
推荐指数
5
解决办法
31万
查看次数

如何使用zlib压缩缓冲区?

zlib网站上有一个用法示例:http://www.zlib.net/zlib_how.html

但是在示例中,它们正在压缩文件.我想压缩存储在内存缓冲区中的二进制数据.我也不想将压缩缓冲区保存到磁盘.

基本上这是我的缓冲区:

fIplImageHeader->imageData = (char*)imageIn->getFrame();
Run Code Online (Sandbox Code Playgroud)

如何用zlib压缩它?

我会很感激如何做到这一点的代码示例.

c++ zlib

34
推荐指数
4
解决办法
4万
查看次数

在c ++中快速将原始数据转换为十六进制字符串

我正在从文件中读取数据并尝试将原始数据显示为2位十六进制字符串.

我正在使用Qt框架,特别是QTextEdit.

我尝试了很多不同的方法,几乎​​完成了我想要它做的事情,但它有一些我不知道的意外错误.

目前这是我的实施:

1)读入数据:

ifstream file (filePath, ios::in|ios::binary|ios::ate);
if (file.is_open())
{
    size = file.tellg();
    memblock = new char [size+1];
    file.seekg(0, ios::beg);
    file.read(memblock, size);
    file.close();
}
Run Code Online (Sandbox Code Playgroud)

2)创建一个将使用的QString(因为QTextEdit需要一个QString):

QString s;
Run Code Online (Sandbox Code Playgroud)

3)循环遍历数组,将每个连续的字符附加到QString.

int count = 0;
for(i=0;i<size;i++)
{
    count++;;
    s.append(QString::number(memblock[i], 16).toUpper());
    s.append("\t");
    if (count == 16)
    {
        s.append("\n");
        count -= 16;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这个工作正常,除非它到达一个角色FF,它显示为FFFFFFFFFFFFFFFF

所以我的主要问题是:

  1. 为什么只有'FF'字符显示为'FFFFFFFFFFFFFFFF'?
  2. 有没有办法将char数据转换为基本16字符串而不使用QString :: number?

我希望这个实现尽可能快,所以如果像sprintf这样的东西可以工作,请告诉我,因为我猜想QString :: number可能会更快.

c++ qt char

12
推荐指数
1
解决办法
4万
查看次数

标签 统计

c++ ×3

c ×2

char ×1

hex ×1

iostream ×1

packing ×1

padding ×1

printf ×1

qt ×1

struct ×1

structure ×1

zlib ×1