小编Mic*_*ael的帖子

ctypes将指针传递给结构中的字段

我需要在Python中构造以下数据类型以传递给C函数:

struct {
  unsigned a,b,c;
  char data[8];
};
Run Code Online (Sandbox Code Playgroud)

但是,我需要实际将指向数据字段的指针传递给函数,而不是指向结构的指针,我无法弄清楚如何执行此操作.

这是我到目前为止:

from ctypes import *                                                           
class MyStruct(Structure):                                              
  _fields_ = [("a",c_uint), ("b",c_uint), ("c",c_uint), ("data",c_char*8)]
mystruct = MyStruct(0,1,8,"ABCDEFGH")
external_c_function(mystruct.data)
Run Code Online (Sandbox Code Playgroud)

现在在CI中有这个功能:

int external_c_function(char *data) {
  int a = ((unsigned *)data)[-1];
  int b = ((unsigned *)data)[-2];
  int c = ((unsigned *)data)[-3];
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,当函数被调用时,"data"正确地指向"ABCDEFGH",但是当我尝试获取其前面的其余struct数据时,它就是垃圾.我究竟做错了什么?mystruct不是像真正的C结构那样在内存中按顺序存在吗?我怀疑阵列发生了一些有趣的事情:我实际上是在做这样傻事吗?

struct {
  unsigned a,b,c;
  char *data; // -> char[8]
};
Run Code Online (Sandbox Code Playgroud)

如果是这样,我该怎么做呢?

python struct ctypes pointers

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

StringBuilder.toString 是否保留构建的字符串?

我正在创建一个 StringBuilder 来收集我定期刷新到服务器的字符串。如果刷新失败,我想保留这些字符串以便下次再试,但同时我可能会收到额外的字符串,这些字符串必须添加到 StringBuilder。

我想知道最有效的方法是什么,因为这是在 Android 应用程序中完成的,其中电池使用情况和 CPU 使用情况是一个大问题。调用 StringBuilder 的 toString() 函数是否会存储它在内部返回的结果字符串,以便后续调用不必执行复制所有原始字符串的工作?或者,如果调用失败,我是否应该创建一个新的 StringBuilder,并使用 toString() 的返回值进行初始化?

java stringbuilder android

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

从浏览器访问 Android API

我知道如果我使用嵌入式 WebView,我可以从 javascript 调用 android 本机 API。

但是,是否可以从 Android 中的常规浏览器(例如 Firefox Mobile 或股票浏览器)访问这些 API?我想我必须在某处明确授予许可,否则这将是一个很大的安全漏洞。

我在创建运行 javascript 的特殊应用程序时遇到问题;我的应用程序是运行在服务器上的常规 Web 应用程序(未嵌入到我的 android 应用程序中)并且经常更新(因此不适合嵌入到应用程序中),在某些情况下,添加直接查询各种信息的功能会很有用来自网页,主要是为了防止Android杀死浏览器并在重新进入时强制重新加载Web应用程序的时间过长,因为我不得不花5秒钟跳出(例如)Firefox以手动获取信息。

javascript android native

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

如何创建个人JavaScript库和框架?

作为开发人员,我想创建自己的JavaScript库和框架.在架构和功能方面,我应该考虑哪些方面?

javascript

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

服务器上Git存储文件的位置?

我根据这里的说明设置了git .但是,在创建测试文件,提交它并将其推送到服务器之后,我在git目录下的任何地方都看不到该文件.我希望它会出现在机器上的Web服务器可以看到它的某个地方,这样推送会立即显示出对服务器的http请求.

我知道git应该是更自包含的,在客户端,文件形成一个可以这种方式使用的很好的包.服务器不做同样的事情吗?

更新:我最初没有使用"裸"选项.但是当我这样做,并且我尝试从远程执行初始提交时,我收到了一条我不太了解的重大错误消息.

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the …
Run Code Online (Sandbox Code Playgroud)

git

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

使用javascript在文档中使用python html解析失败

我正在尝试使用Python来解析HTML(尽管严格来说,服务器声称它是xhtml)并且我尝试过的每个解析器(ElementTree,minidom和lxml)都会失败.当我去看问题所在的位置时,它位于脚本标记内:

<script type="text/javascript">
... // some javascript code
    if (condition1 && condition2) { // croaks on this line
Run Code Online (Sandbox Code Playgroud)

我知道问题是什么,应该引用&符号.问题是,这是在javascript脚本标记内,因此无法引用,因为这会破坏代码.

这里发生了什么?内联javascript如何能够破解我的解析,我该怎么办呢?

更新:根据请求,这是与lxml一起使用的代码.

>>> from lxml import etree
>>> tree=etree.parse("http://192.168.1.185/site.html")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "lxml.etree.pyx", line 3299, in lxml.etree.parse (src/lxml/lxml.etree.c:72655)
  File "parser.pxi", line 1791, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:106263)
  File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:106564)
  File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:105561)
  File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:100456)
  File "parser.pxi", …
Run Code Online (Sandbox Code Playgroud)

html python

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

ImageMagick单次调用中的多个操作

我试图让ImageMagick在一次调用中执行多个操作(在本例中为crop),但似乎不可能.例如,我可以裁剪,旋转,然后另一个裁剪作为两个单独的命令:

$ convert test.jpg -crop 223x187+588+757 -rotate 330 crop2.jpg 
$ convert crop2.jpg -crop 200x100+43+87 crop3.jpg
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试将它们组合成一个命令,我会收到一个错误:

$ convert test.jpg -crop 223x187 + 588 + 757 -rotate 330 -crop 200x100 + 43 + 87 crop3.jpg convert:geometry不包含图片`test.jpg'@ warning/transform.c/CropImage/666.

显然我可以创建一个管道,但如果可能的话,我想避免多个进程的额外开销.有没有办法做到这一点?

更新:此外,管道似乎有问题:我不想要额外的压缩/解压缩阶段,所以我尝试将其管道为RGB,但我似乎无法正确获取参数:

convert test.jpg -crop 223x187+588+757 -rotate 330 rgb:- | convert -size 287x273 -depth 8 rgb:- -crop 200x100+43+87 crop3.jpg
convert: unexpected end-of-file `-': No such file or directory @ error/rgb.c/ReadRGBImage/231.
Run Code Online (Sandbox Code Playgroud)

好的,所以事实证明上面的错误是因为我计算的图像大小与ImageMagick的计算相差两个像素.因此,显然必须尝试使图像大小计算与IM完全相同,这是管道两个命令的需要引入的额外问题.

imagemagick imagemagick-convert

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

以全分辨率捕获HTML5中的图像

可以使用MediaStream API在javascript中捕获图像。但是,要这样做,首先必须实例化视频对象,然后将帧绘制到画布中以获取图像。但不幸的是,许多设备(例如电话)不允许您以设备的完整本机分辨率捕获视频。例如,在我的手机上,最大图像分辨率约为4000x3000,但最大视频分辨率仅为1920x1080。显然,捕获仅是可用分辨率的1/6的图像是不可接受的。

那么,如何才能在设备上访问相机的完整分辨率?

javascript html5 getusermedia mediastream

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

为什么string concat应用不按预期工作?

我调用concat()一个字符串,如下所示:

> "1".concat("2","3")
< "123"
Run Code Online (Sandbox Code Playgroud)

现在我想这样做,我有一个字符串数组连接togther.但它并没有达到我的预期:

> "1".concat.apply(["2","3"])
< "2,3"
Run Code Online (Sandbox Code Playgroud)

不仅缺少第一个元素,而且在传递的两个元素之间插入了一个逗号,就像它将apply中的参数转换为字符串然后返回它一样.

我怎么用申请?我无法使用,String.prototype.concat.apply因为第一个参数实际上是一个可以是字符串或数组的变量.我宁愿不做一些可怕的黑客,我必须检测类型,然后为参数可能的每种可能的类型单独声明.

为了清楚起见,我正在尝试实现一个concat()适用于任何有意义的第一个参数类型的函数(例如字符串或数组).到目前为止它看起来像这样,但是不起作用:

function concat(x) {
    var args = Array.prototype.slice.call(arguments,1)
    return x.concat.apply(args)
}
Run Code Online (Sandbox Code Playgroud)

javascript concat

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

在gcc中匿名使用预定义的结构?

在gcc中,可以创建一个匿名结构,如下所示:

struct test2 {
    struct {
            int x;
            int y;
    };
    int z;
};
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用预定义版本的匿名结构做同样的事情时,它会失败:

struct test1 {
    int x;
    int y;
};

struct test2 {
    struct test1;
    int z;
};
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是我想要定义一个结构,它包含一组与C类的"成员函数"相对应的函数指针.如果我不匿名包含结构,那么我最终不得不做一些令人讨厌的事情:

object->API->function(object,...);
Run Code Online (Sandbox Code Playgroud)

对于我需要做的一些事情,这只是普通的不起作用(例如,因为"object.API"与"对象"不匹配,所以很难或不可能从支持隐藏的其他语言进行自动绑定对象指针.)

目前,我只是复制/粘贴函数,但这很乏味且容易出错.我可以使用C预处理器,但是创建一个包含大量函数原型的宏似乎很难看.

c gcc struct anonymous

2
推荐指数
1
解决办法
444
查看次数