我正在尝试了解 python 中的 ctypes,并且能够完成一些简单的工作,但是当涉及到解压 c 结构时,我发现自己遇到了一些困难。我决定要学习这个,我应该尝试一下,虽然我知道套接字标准库实现了gethostbyname_ex(),但我想我应该尝试使用ctypes和 来实现它libc.gethostbyname()。
我能够libc.gethostbyname()相当轻松地执行:
#!/usr/bin/env python
from ctypes import *
cdll.LoadLibrary('libc.so.6')
libc = CDLL('libc.so.6')
he = libc.gethostbyname("www.google.com")
Run Code Online (Sandbox Code Playgroud)
但这给了我一个hostent数据结构。我认为解压这个的最好方法是获取 c 结构并创建一个继承自 的类ctypes.Structure,所以我想出了这个(我hostent在 中找到了结构定义netdb.h):
class hostent(Structure):
'''
struct hostent
{
char *h_name; /* Official name of host. */
char **h_aliases; /* Alias list. */
int h_addrtype; /* Host address type. */
int h_length; /* Length of address. */
char **h_addr_list; /* List …Run Code Online (Sandbox Code Playgroud) 如何对不同字段求和?我想对材料(1)的所有信息求和...所以我想添加 5+4+6+300 但我不确定如何添加。除了只做材料(1)。五月+材料(1)。六月等之外,还有其他方法吗?
material(1).May= 5;
material(1).June=4;
material(1).July=6;
material(1).price=300;
material(2).May=10;
material(2).price=550;
material(3).May=90;
Run Code Online (Sandbox Code Playgroud) 我正在阅读 K&R 的《C 编程语言》,在有关结构的部分中,我遇到了这些代码片段:
struct maxpt = { 320, 200 };
Run Code Online (Sandbox Code Playgroud)
和
/* addpoints: add two points */
struct addpoint(struct point p1, struct point p2)
{
p1.x += p2.x;
p1.y += p2.y;
return p1;
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,它看起来像是将值 320 和 200 分配给变量 maxpt 的成员。但是我注意到缺少结构类型的名称(不应该是“struct struct_name maxpt = {320, 200}”吗?在第二种情况下,函数返回类型只是“struct”而不是“struct name_of_struct”。
我不明白为什么他们不包括结构名称 - 它如何知道它正在处理的特定类型的结构?更让我困惑的是,在前面的代码片段中,它们确实包含结构名称,例如在以下函数的返回类型中,它是“结构点”而不仅仅是“结构”。为什么他们在某些情况下包含名称而在其他情况下不包含名称?
/* makepoint: make a point from x and y components */
struct point makepoint(int x, int y)
{
struct point temp;
temp.x = x;
temp.y = y;
return temp; …Run Code Online (Sandbox Code Playgroud) http://play.golang.org/p/TE02wFCprM
当我尝试从列表中的结构中获取值时,出现错误恐慌。
fmt.Println(A_elem.Value.(Player).year) //3000
Run Code Online (Sandbox Code Playgroud)
我所做的是创建一个列表并将结构添加到列表中。当我从列表中检索元素时,它是接口类型。但如果我打印出整个接口类型值,它仍然包含结构值。所以我试图获取结构的一个值,但出现了恐慌错误。
这条线运作良好。
fmt.Println(A_elem.Value) //&{dddd 3000}
Run Code Online (Sandbox Code Playgroud)
代码在这里
package main
import (
"container/list"
"fmt"
)
func main() {
type Player struct {
name string
year int
}
A := new(Player)
A.name = "aaaa"
A.year = 1990
B := new(Player)
B.name = "eeee"
B.year = 2000
C := new(Player)
C.name = "dddd"
C.year = 3000
play := list.New()
play.PushBack(A)
play.PushBack(B)
play.PushBack(C)
A_elem := play.Back()
//A_elem.Value is type Player struct
fmt.Println(A_elem.Value) //&{dddd 3000}
fmt.Println(A_elem.Value.(Player).year) //3000
}
Run Code Online (Sandbox Code Playgroud)
我想将结构保存在列表中,并能够从列表中保存的结构之一检索特定值。
我怎样才能做到呢?
提前致谢。
在这个 REST教程网站上,
什么时候放一点像
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test?query=someparam
Run Code Online (Sandbox Code Playgroud)
代替
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test/someparam
Run Code Online (Sandbox Code Playgroud)
要么
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test/someparam/var1/param/var2/param
Run Code Online (Sandbox Code Playgroud)
?
我在SO上看到了很多东西。
我编写了一个程序来交换数组中的两个结构,我的编码如下
#include <stdio.h>
struct a {
char *name;
int id;
char *department;
int num;
};
typedef struct a ab;
void swap(ab *, ab *);
int main(int argc, char *argv[])
{
ab array[2] = {{"Saud", 137, "Electronics", 500}, {"Ebad", 111, "Telecom", 570}};
printf("First student data:\n%s\t%d\t%s\t%d", array[0].name, array[0].id,
array[0].department, array[0].num);
printf("\nSecond Student Data\n%s\t%d\t%s\t%d\n", array[1].name, array[1].id,
array[1].department, array[1].num);
swap(&array[0], &array[1]);
// printf("")
return 0;
}
void swap(ab *p, ab *q){
ab tmp;
tmp = *p
*p = *q;
*q = tmp;
}
Run Code Online (Sandbox Code Playgroud)
在编译它时会出错, …
在下面的代码中,我已经将结构成员变量声明为结构名称的同名.
struct st
{
int st;
};
int main()
{
struct st t;
t.st = 7;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道,它在GCC编译器上工作正常并且不会产生冲突错误.
所以,
我需要为我们公司各种前端项目使用的一些常用功能制作一个 NPM 包,但非常不确定如何正确执行。我们正在使用 Typescript,tsdx似乎处理了几件我不确定如何正确执行的事情,但它没有说明如何构建“实用程序”类型的包。
我不明白的是,我应该"main"在package.json点的时候有没有一个合乎逻辑的单一出口/类/函数是有道理的包?
它应该只导出整个包中的每个“公共”函数吗?如果是这样,这将如何影响摇树(我目前不太了解)以及诸如此类的事情?
如果不应该,应该"main"指向什么,应该如何导出和导入东西?我会为像例如要能够import foobar from '@org/common/category/foobar,但是包是由故宫创建方式,似乎打包路径往往会落得包括dist或lib或类似的东西,我真的不想。
应该如何构建一个“多功能 NPM 包”来获得干净的导入和有效的 tree-shaking 和其他好东西?
有没有人在 GitHub 或其他可用的地方有任何好的、干净、简单的库示例?我曾尝试查看像 lodash 这样的项目,但它们通常不是用 Typescript 编写的,而且似乎通常具有相当复杂的设置,包括单存储库、工作区、自定义构建脚本等......
所以我有这个问题。我应该创建一些排序函数以在 C 中的通用排序例程中使用。我只有一个函数可以工作。该函数应该用作结构的排序函数。代码应按年份排列列表。
以下是预先编写并用于排序例程的两个辅助函数的代码:
static
void swap(void **left, void **right) {
void *temp = *left;
*left = *right;
*right = temp;
}
void sort_array(void *Array[], unsigned size, int (*ordered)(void *, void *))
{
int i;
int have_swapped = 1;
while (have_swapped) {
have_swapped = 0;
for (i = 0; i < size - 1; ++i ){
if (ordered(Array[i], Array[i+1])) {
swap(&Array[i], &Array[i+1]);
have_swapped = 1;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后就是这个函数,也是预写在 main 中用来测试的。
int main() {
int i;
int status = …Run Code Online (Sandbox Code Playgroud)