小编Mat*_*att的帖子

Rust有一个dlopen等价物

Rust是否有办法使程序可插入.在C中,我创建的插件是.so文件,我用dlopen加载.Rust提供了一种做同样事情的本地方式吗?

plugins rust

29
推荐指数
2
解决办法
6358
查看次数

Python列表理解 - 访问最后创建的元素?

是否可以访问列表推导中生成的前一个元素.

我正在研究一些玩具加密的东西.将密钥作为任意大整数,初始化值和元素列表作为要加密的消息.我需要使用先前的加密元素和密钥对每个元素进行xor.以下循环可以.

previous = initialization_value
cipher = []
for element in message:
    previous = element ^ previous ^ key
    cipher.append(previous)
Run Code Online (Sandbox Code Playgroud)

我觉得应该可以将其转换为列表理解,但我不确定如何处理初始值或访问生成的先前值.是否有可能,如果是这样,理解力是什么?

python

16
推荐指数
3
解决办法
7859
查看次数

使用Rust解析二进制协议的最佳方法是什么?

基本上我有一个基于tcp的网络协议来解析.

在CI中只能将一些内存转换为我想要的类型.我怎样才能完成与Rust类似的东西.

rust

9
推荐指数
1
解决办法
2625
查看次数

Python可写缓冲区/内存视图到数组/ bytearray/ctypes字符串缓冲区

问题:

  • 固定大小记录的二进制数据
  • 想要使用struct.unpack_from和struct.pack_into来操作二进制数据
  • 不需要数据的副本
  • 想要多次查看内存以简单地抵消计算等.
  • 数据可以在array.array bytearray或ctypes字符串缓冲区中

我试图做的:

part1 = buffer(binary_data, 0, size1)
part2 = buffer(binary_data, size1, size2)
part3 = buffer(binary_data, size1 + size2) # no size is given for this one as it should consume the rest of the buffer
struct.pack_into('I', part3, 4, 42)
Run Code Online (Sandbox Code Playgroud)

这里的问题是struct.pack_into抱怨只读缓冲区.我已经查看了内存视图,因为它们可以创建读/写视图,但是它们不允许您像缓冲区函数那样指定偏移量和大小.

如何使用struct.unpack_from和struct.pack_into将多个零拷贝视图添加到可读,可写且可以访问/修改的字节缓冲区中

python ctypes bytearray python-2.7

7
推荐指数
1
解决办法
7326
查看次数

python子进程模块:循环遍历子进程的stdout

我有一些使用子进程模块运行的命令.然后我想循环输出的行.文档说不要做data_stream.stdout.read我不是,但我可能正在做一些调用它的东西.我像这样循环输出:

for line in data_stream.stdout:
   #do stuff here
   .
   .
   .
Run Code Online (Sandbox Code Playgroud)

这会导致死锁,例如从data_stream.stdout读取,还是为这种循环设置的Popen模块,以便它使用通信代码但是为你处理它的所有调用?

python subprocess

5
推荐指数
2
解决办法
7852
查看次数

bash - 重定向stdoutput和stderror并不能捕获所有输出

我正在编写一些测试脚本,并希望捕获所有错误输出并将其写入错误日志以及所有常规输出并将其写入单独的日志.我正在使用表单的命令

cmd> output.file 2> error.file

我正在编写测试脚本的命令会导致分段错误.当命令段错误时,bash仍会向终端打印出分段错误.

我希望这不会发生或重定向与标准错误.

可能吗?它必须是bash正在做的,因为两个输出流都被重定向.

bash io-redirection

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

C预处理器扩展到另一个类似对象的宏

我有以下代码(混合C/C++应用程序)

#include <stdint.h>
#define BUFFER_SIZE UINT16_MAX
Run Code Online (Sandbox Code Playgroud)

我期望BUFFER_SIZE(st)UINT16_MAX是在stdint.h中定义的(65535),但编译器抱怨UINT16_MAX没有定义.显然宏观扩张并没有像我想的那样发生.

我可以自己定义它(65535),但想知道为什么这不起作用.

回复几条评论:

  • 我的编译器支持该uint16_t类型,并UINT16_MAX在stdint.h中定义

  • 一个人提到了定义__STDC_LIMIT_MACROS- 在尝试包含stdint.h之前我已经尝试过定义它.

回答

所以它__STDC_LIMIT_MACROS更复杂.

  1. #define位于头文件中(包括stdint.h)
  2. __STDC_LIMIT_MACROS在包含stdint.h之前,我在此文件中有#define
  3. 我将该头文件包含在另一个源文件中.这个其他源文件也包括#include stdint.h,并在包含我的标题之前这样做了.因此,当首次包含stdint.h时__STDC_LIMIT_MACROS未定义

我的解决方案只是添加-D__STDC_LIMIT_MACROS到我的编译器参数.

c c++ macros limit c-preprocessor

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

c字符串分配差异?

我有一个函数,它将char*作为唯一的参数.然后我对它执行一些strtok操作.有时它有效,有时甚至有效.它的工作取决于字符串的构造方式.例如,这是两个案例.

int main()
{
   char glob[] = "/abc/def/ghi";
   char *glob2 = "/abc/def/ghi";

   func(glob);  //this one works
   func(glob2); //this one doesnt work

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

两种分配方法之间的区别是什么?为什么strtok会在第二种分配方法上爆炸?

c

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