小编you*_*ate的帖子

用c ++将二进制数据写入fstream

我有一些结构要写入二进制文件。例如,它们由来自 cstdint 的整数组成uint64_t。有没有办法将它们写入二进制文件,而不需要我手动将它们拆分为数组char并使用fstream.write()函数?

我试过的

我天真的想法是 C++ 会发现我有一个二进制模式的文件,<<并将整数写入该二进制文件。所以我试过这个:

#include <iostream>
#include <fstream>
#include <cstdint>

using namespace std;

int main() {
  fstream file;
  uint64_t myuint = 0xFFFF;
  file.open("test.bin", ios::app | ios::binary);
  file << myuint;
  file.close();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这将字符串“65535”写入文件。

我可以以某种方式告诉 fstream 切换到二进制模式,例如如何使用 更改显示格式<< std::hex

如果上面的所有内容都失败了,我需要一个将任意 cstdint 类型转换为 char 数组的函数。

我并不真正关心字节顺序,因为我会使用相同的程序来读取它们(在下一步中),所以它会抵消。

c++ io binary file

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

如何在不使用特殊二进制格式的情况下以VHDL / modelsim格式读取二进制数据

一些背景:

我正在编写用于以太网MAC的VHDL测试平台。测试平台由一个程序包和一个组合的实体+体系结构文件组成。我想从wireshark导出的二进制文件中读取测试台将发送到MAC的以太网帧。
我正在使用VHDL 2008编写代码,并且正在使用Mentor Graphics Model Technology ModelSim ALTERA vcom 10.0d编译器。

问题:

到目前为止,我发现在VHDL / modelsim中读取二进制数据的所有解决方案都使用特殊的文件格式,其中bit_vector的1位由文件中的几位表示。我希望VHDL将二进制文件读取为8位bit_vector。
到目前为止,我最近使用的是字符类型文件,在其中可以直接用二进制表示形式写8位ASCII字符。

io vhdl modelsim

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

在Matlab中生成64位随机整数

我正在尝试编写一个matlab函数,该函数生成一个二进制文件,其中包含一系列64位随机整数.这些应该是高质量的,这就是为什么我想使用64位mersenne twister算法或更好.内置的randi()函数只能生成32位数.我之前使用以下方法生成了32位结果:

rng('shuffle', 'twister');
randi(2^32-1, 'uint32')
Run Code Online (Sandbox Code Playgroud)

但这不适用于64位.如果我没记错使用多个32位整数来生成64位随机整数是不好的做法,但如果有一个很好的解决方案我会对它开放.
为了使问题更加困难,我目前正在使用32位Windows XP机器.

random 64-bit matlab

3
推荐指数
1
解决办法
1088
查看次数

python ctypes,通过引用传递双指针

问题

我正在尝试使用具有以下原型的 ac 库中的函数:这里
int glip_get_backends(const char ***name, size_t *count);
name参数是问题所在。它是一个通过引用传递的 2 维字符数组。在 C 中,该函数的用法如下:

const char** name;
size_t count;
glip_get_backends(&name, &count);
for (size_t i = 0; i < count; i++) {
    printf("- %s\n", name[i]);
}
Run Code Online (Sandbox Code Playgroud)

现在我想使用 ctypes 从 python 中使用这个函数。


我试过的

对我来说最合乎逻辑的方法是在 python 中执行此操作:

lglip = CDLL("libglip.so")
count = c_int(0)
backends = POINTER(POINTER(c_char))
lglip.glip_get_backends(byref(backends), byref(count))
Run Code Online (Sandbox Code Playgroud)

这导致了错误消息

TypeError: byref() 参数必须是 ctypes 实例,而不是 '_ctypes.PyCPointerType'


下一个方法是使用该POINTER()函数三次并省略byref(),但这会导致以下错误:

ctypes.ArgumentError: 参数 1 :: 不知道如何转换参数 1


然后我从这个问题中汲取了灵感,并提出了以下内容:

lglip …
Run Code Online (Sandbox Code Playgroud)

c python ctypes

3
推荐指数
1
解决办法
7842
查看次数

标签 统计

io ×2

64-bit ×1

binary ×1

c ×1

c++ ×1

ctypes ×1

file ×1

matlab ×1

modelsim ×1

python ×1

random ×1

vhdl ×1