小编Dar*_*ord的帖子

Perl:一次读取二进制文件一个字节

我正在编写一个工具,需要一次读取一个字节的二进制文件,处理每个字节,并根据处理的值可能采取一些操作.但由于某种原因,Perl获取的值与文件中的数据不同.我正在使用类似于此的代码(为了简洁而剥离,但这仍然存在问题):

#!/usr/bin/perl
use strict;

my $bytesToProcess = 16;
my $fileName = 'datafile.bin';

print "Processing $bytesToProcess bytes...\n";

open FILE, "<:raw", $fileName or die "Couldn't open $fileName!";

for my $offset (0 .. $bytesToProcess - 1)
{
    my $oneByte;
    read(FILE, $oneByte, 1) or die "Error reading $fileName!";
    printf "0x%04X\t0x%02X\n", $offset, $oneByte;
}

close FILE;
Run Code Online (Sandbox Code Playgroud)

输入值(数据文件的前16个字节): 50 53 4D 46 30 30 31 35 00 00 70 00 07 3F 10 00

输出:

Processing 16 bytes...
0x0000  0x00
0x0001  0x00
0x0002  0x00
0x0003  0x00 …
Run Code Online (Sandbox Code Playgroud)

binary perl byte file input

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

sv_catpv()和sv_catpvs()之间有什么区别?

根据perlapi,sv_catpv()工作原理如下:

NUL-terminated字符串连接到SV中字符串的末尾.如果SV设置了UTF-8状态,则附加的字节应该是有效的UTF-8.处理'获得'魔法,但不是'设置'魔法.

void sv_catpv(SV *const sv, const char* ptr)

sv_catpvs()不过我发现的大多数XS教程都使用了这个:

喜欢sv_catpvn,但是采用文字字符串而不是字符串/长度对.

void sv_catpvs(SV* sv, const char* s)

嗯,这不是很有帮助,所以让我们来看看sv_catpvn():

将字符串连接到SV中字符串的末尾.该len指示要复制的字节数.如果SV设置了UTF-8状态,则附加的字节应该是有效的UTF-8.处理'获得'魔法,但不是'设置'魔法.

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

所以,sv_catpvn做同样的事情,sv_catpv只不过它采用的字符串长度作为一个单独的参数,并且sv_catpvs是一样的sv_catpvn,只不过它采用的文本字符串.

有有一些细微的差别sv_catpvsv_catpvs我失踪,或者他们只是两种方法做同样的事情?

perl xs

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

如何在Symfony2中使用一堆不相关的实体创建表单?

我正在开发一个日志解析器,它使用数据库表将日志事件"转换"为人类可读的等价物以进行报告.

例如,像"start_application_minecraft"这样的日志条目将转换为"Started Minecraft".

我正在尝试创建一个用于添加/更新显示文本的Web界面,但我无法弄清楚如何将它们放入Symfony Form对象中.

我有一个LogEvent实体(具有for ID,Text和的属性DisplayText),并且我创建了一个与这些属性对应的Form Type.

它适用于一次修改一个事件,但我希望将它们全部放在一个页面上,只需一个提交按钮即可更新所有内容.问题是我在嵌入表单中找到的所有文档都涉及相关的实体(例如包含多个产品的类别),但在我的情况下,我需要处理的所有实体都是完全不相关的.设置它的最佳方法是什么?

php forms symfony

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

如何将 Mercurial 存储库转换为 Git(支持 LFS)?

我有一个 Mercurial 存储库,其中包含 300 多个提交,其中还包含许多相对较大(例如 10+ MiB)的文件。我想将其转换为 Git 存储库,保留所有分支和合并,并使用 LFS 扩展来管理大文件。到目前为止,这是我的流程:

  1. 使用以下命令从服务器克隆 Hg 存储库hg clone <URL>
  2. 在其他地方创建一个新的 git 存储库git init
  3. cd进入 git repo,然后使用hg-fast-export -r <hg-repo> -A <authors>. 此时,我有一个可用的存储库,但所有大文件仍然是索引的一部分。我想在其他任何内容“之前”插入一个新的提交.gitignore并插入.gitattributes
  4. 创建一个新的空分支,没有父提交:git checkout --orphan new-root && git rm -rf .
  5. 创建这两个文件并将它们提交到新分支。git add * && git commit -m "Check in git metafiles"
  6. 现在我的“新”根提交已准备就绪,因此我尝试根除整个事情:git checkout master && git rebase --root --onto new-root --preserve-merges

这就是我被困住的地方。在将这个错误转储给我之前,rebase 得到了大约 10 次提交。

error: Your local changes to the …
Run Code Online (Sandbox Code Playgroud)

git mercurial git-lfs

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

如何使用 libclang 检索完全限定的函数名称?

我需要解析一个 C++ 代码文件,并使用完全限定名称查找其中的所有函数调用。我正在使用 libclang 的 Python 绑定,因为它似乎比编写我自己的 C++ 解析器更容易,即使文档很少。

示例 C++ 代码:

namespace a {
  namespace b {
    class Thing {
    public:
      Thing();
      void DoSomething();
      int DoAnotherThing();
    private:
      int thisThing;
    };
  }
}

int main()
{
  a::b::Thing *thing = new a::b::Thing();
  thing->DoSomething();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇脚本:

import clang.cindex
import sys

def find_function_calls(node):
  if node.kind == clang.cindex.CursorKind.CALL_EXPR:
    # What do I do here?
    pass
  for child in node.get_children():
    find_function_calls(child)

index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
find_function_calls(tu.cursor)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的输出是被调用函数的完全限定名称列表:

a::b::Thing::Thing
a::b::Thing::DoSomething
Run Code Online (Sandbox Code Playgroud)

我可以使用 获得函数的“短”名称 …

c++ python libclang

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

标签 统计

perl ×2

binary ×1

byte ×1

c++ ×1

file ×1

forms ×1

git ×1

git-lfs ×1

input ×1

libclang ×1

mercurial ×1

php ×1

python ×1

symfony ×1

xs ×1