- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法使用 C 语言来完成与使用 Python 中的函数 struct.pack(...)
相同的结果?我正在尝试用 C 编写最初用 Python 编写的代码,该代码有这样一行:
header = (struct.pack("<L", ver) + prev_block.decode('hex')[::-1]
+ mrkl_root.decode('hex')[::-1]
+ struct.pack("<LLL", time_, bits, nonce))
我想用 C 重写。
更新
我已经启动了这个初步的 C 代码:
char* ver_pack;
char* prev_block_pack;
char* mkrl_root_pack;
char* time_pack;
char* bits_pack;
char* nonce_pack;
char* header = malloc(strlen(ver_pack)+strlen(prev_block_pack)+strlen(mkrl_root_pack)+strlen(time_pack)+strlen(bits_pack)+strlen(nonce_pack));
strcpy(header, ver_pack);
strcat(header, prev_block_pack);
strcat(header, mkrl_root_pack);
strcat(header, time_pack);
strcat(header, bits_pack);
strcat(header, nonce_pack);
现在我需要计算出标题中每个元素的值,它们是:
int ver
char* prev_block
char* mrkl_root
unsigned int time_
unsigned int bits
unsigned int nonce
最佳答案
您需要了解的第一个问题是 char* 不是字符串类型。因为您解码的是十六进制,所以您应该期望得到任何值,包括几个零。因此需要单独存储二进制数据的长度。
当然,在 C++ 中使用 std::string 会容易得多,它更像 python 字符串(免责声明,我是一名 C++ 程序员)。
第二,你想存储这个缓冲区,还是只是流式传输它?如果您只是通过编写已知大小的这些片段将其流式传输到文件(或其他文件),那就容易得多。如果我想将 header 放入 std::string 中,这就是我在 C++ 中所做的。如果我用 C 编写文件,这就是我要做的。只需调用 fwrite 而不是 memcpy。
将 header 存储在内存中意味着您必须再次存储长度,因为它包含任意二进制数据,并且像以前一样,它可能会将空字符作为数据的一部分。这是一个示例:
int length = sizeof(ver) + prev_block_length + mrkl_root_length + sizeof(time_) + sizeof(bits) + sizeof(nonce);
char * header = (char*)malloc(length);
char * p = header; // placeholder which we advance as we write
memcpy(p, &ver, sizeof(ver)); p += sizeof(ver);
memcpy(p, prev_block, prev_block_length); p += prev_block_length;
memcpy(p, mrkl_root, mrkl_root_length); p += mrkl_root_length;
memcpy(p, &time_, sizeof(time_)); p += sizeof(time_);
memcpy(p, &bits, sizeof(bits)); p += sizeof(bits);
memcpy(p, &nonce, sizeof(nonce)); p += sizeof(nonce);
// and eventually you must free (another good reason to just stream it)
free(header);
关于python - C相当于Python的struct.pack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45850687/
我在运行 git gc --prune=now 并得到结果 Counting objects: 100% (619263/619263), done. Delta compression using
我想获取某个类中的所有链接。 HTML 的一个例子是 ES M3 E-mini S&P500 June 2013
我正在 32 位 ARM mcu(Atmel SAM4SD32C,Cortex-M4/ARMv7E-M 部件)上实现二进制日志记录系统,并且正在设计我的数据结构。我的目标是将日志格式描述为一个压缩结构
以下测试代码: [Test] public void PossibleHtmlAgilityPackBug() { const string html = @""; var doc =
如何利用 D3 圆包布局来得到类似这样的图表: (即使有更细长的椭圆)? 这种图表样式的关键应用是更容易放置标签。 这是 jsfiddle这演示了我为其他目的制作的圆包,但我想对于任何想要试验和测试涉
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在我正在处理的 WPF 应用程序中尝试使用合并的 ResourceDictionaries 解决问题时,我遇到了这个奇怪的问题。 我在外部 DLL(“通用”)中定义了自定义控件(TextButton、
在使用 webpack、webpacker gem 和 Rails 5.1 时,我注意到第一次运行 rspec 会生成 public/packs 和 public/packs-test 。 这些目录是
给定一个 HTML 文档,我想识别文档中的所有数字并在数字周围添加自定义标签。现在,我使用以下内容: HtmlNodeCollection bodyNode = htmlDoc.DocumentNod
我正在尝试使用 #pragma pack (n) 对齐数据成员.以下面为例: #include using namespace std; #pragma pack(8) // or (16) str
我正在尝试让 Html Agility Pack 在我的情况下工作。我需要检测现有 HTML 页面中的所有脚本元素并删除它们,将更改保存到另一个文件。在这里,bodyNode 返回正确数量的脚本标签,
我正在使用 GitLab,需要创建一个 .gitlab-ci.yml 脚本来为生成 nuGet 包的项目运行持续集成管道。 我在寻找可靠的文档来回答这个问题时遇到严重问题: 我应该使用 dotnet
我一直在尝试查找这个问题,但没有找到有效的解决方案。我的编译器忽略了#pragma pack(push) #pragma pack(2) 和 __ attribute __ ((aligned (2)
我正在尝试在 Ubuntu 10.10 上使用 Solaris Studio for Linux。 当我尝试构建以下代码时, const char * 名称 [] = { "苹果", "橙子", "芒
我正在尝试从 HTML 中删除不必要的内容。具体来说,我想删除评论。我找到了一个很好的解决方案( Grabbing meta-tags and comments using HTML Agility
我正在VHDL中的一个项目上工作,我需要从开关中获取4位输入,并根据其他开关的值向右或向左移动一定数量的位,该按钮需要在向右/向左移位之间切换。但是,当我尝试在Xilinx ISE中实现代码时,出现以
我有一台具有 SSH 访问权限的服务器,我想在那里放置一个 Git 源代码库。我刚刚在本地创建了一个 --bare --shared 存储库并将其复制到每个 SCP 的服务器。现在我想根据 SSH u
-moz-box-pack(或 box-pack)的 justify 属性似乎在 Firefox 中被忽略了。 Live example从我们的网站。每行中的数字应该右对齐,它们在 Chrome 中也
这是我的代码。我想知道如何“正确地”读取 BMP 文件,然后在不强制打包结构的情况下读取 header 值。 typedef struct __attribute__((packed)){ uint8
我是一名优秀的程序员,十分优秀!