好的,所以我试图通过http连接发送POST命令,并使用JSON格式来执行此操作.我正在编写程序在C#中执行此操作,并想知道如何格式化要作为JSON传递给服务器的值数组.
目前我有这个:
new {name = "command" , index = "X", optional = "0"}
这在JSON中转换为:
"name": "command",
"index": "X",
"optional": "0"
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为items的数组,其中每个元素都包含这三个值.所以它本质上是一个对象数组,其中对象包含名称,索引和可选字段.
我的猜测是,这将是这样的:
new {items = [(name = "command" , index = "X", optional = "0"),
(name = "status" , index = "X", optional = "0")]}
Run Code Online (Sandbox Code Playgroud)
如果它是正确的语法,将在JSON中转换为this:
"items":
[
{
"name": "command",
"index": "X",
"optional": "0"
},
{
"name": "status",
"index": "X",
"optional": "0"
}
]
Run Code Online (Sandbox Code Playgroud)
但是,显然我做错了.想法?任何帮助表示赞赏.
在浏览一些源代码时,我在C程序中找到了一个方法,它接受WORD,DWORD和PWORD类型的参数.我知道他们翻译成无符号数字,但为什么他们称为WORD?
是否有一种方便的方法来获取字符串(由用户输入)并将其转换为枚举值?在这种情况下,字符串将是枚举值的名称,如下所示:
enum Day
{
Sunday = 0,
Monday = 1,
...
}
Run Code Online (Sandbox Code Playgroud)
因此,如果用户给出了Day的名称,则可以将其解析为相应的Enum值.
诀窍是,我有超过500个我正在使用的值,它们分布在多个枚举中.
我知道c#中的Enum.Parse方法,所以在c中有这种形式吗?
我试图使用由Dave Gamble编写的cJSON库来读取以下JSON数组:
"items":
[
{
"name": "command",
"index": "X",
"optional": "0"
},
{
"name": "status",
"index": "X",
"optional": "0"
}
]
Run Code Online (Sandbox Code Playgroud)
通过阅读他的文档,我找到了阅读单个对象的方法,但没有关于数组的内容,我无法从给出的示例中推测如何做到这一点.
这是我正在尝试的:
cJSON* request_json = NULL;
cJSON* items = cJSON_CreateArray();
cJSON* name = NULL;
cJSON* index = NULL;
cJSON* optional = NULL;
request_json = cJSON_Parse(request_body);
items = cJSON_GetObjectItem(request_json, "items");
name = cJSON_GetObjectItem(items, "name");
index = cJSON_GetObjectItem(items, "index");
optional = cJSON_GetObjectItem(items, "optional");
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,不仅因为它不起作用,而且我无法弄清楚如何使它正确.
显然,我需要循环读取数组中每个索引的所有条目的过程.我不知道我将如何做到这一点,因为我不知道我应该在这个代码中使用索引,或者它是否是正确的开始.有一个cJSON_GetArrayItem(),但它只需要一个数字(可能是一个索引)而没有字符串来表示它想要的字段.
我正在使用该clock_gettime()命令并尝试将一定量的毫秒附加到timespec我从中得到的数量.我可以这样做吗?
//milli is an int that can be any number (within reason)
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_nesc += (milli*1000000);
Run Code Online (Sandbox Code Playgroud)
或者我是否需要将其拆分并找出是否有任何整秒,将其添加到tv_sec字段中,然后将剩余的添加到tv_nsec?
从本质上讲,该tv_nsec字段可以存储超过1秒的纳秒?
我最近参加了数字逻辑课程并学习了所有关于AND,OR和其他各种逻辑的知识.我们没有涉及的一件事,对编程来说是完全必要的,是if陈述,让我对他们的工作方式感到好奇.
我最好的猜测是它只是一个2:1的多路复用器,当你添加更多else语句时,它会变成4:1和8:1,但对于这样一个简单的概念来说,这似乎有点过于复杂.
任何人都知道一个if声明实际上转化为什么?
所以我知道浮子和双打的精度差异很大.我明白了.诺言.
但是,在C++中,当调用scanf和printf时,用于指定double的符号是"%lf",这代表long float,对吧?因此,虽然浮点数不如双精度浮点数(一般称为长浮点数,因为它可以通过使用更多项来"更长")具有相同的精度,因此基本上是相同的东西?
只是为了澄清,这就是我的意思:
double number = 3.14159;
printf("The number is %lf", number);
Run Code Online (Sandbox Code Playgroud)
所以我的问题的根源是:长期浮动另一个双重名称?
是否可以使用 snprintf用来打印数组?我知道它可以接受多个参数,并且它期望至少与您的格式化字符串所建议的一样多,但是如果我只给它 1 个格式化字符串和一个值数组,它会将整个数组打印到缓冲区吗?
我问的原因是因为我正在修改源代码,而当前的实现只支持将一个值放在一个字符串中,但我正在修改它以支持一组值。我想尽可能少地更改原始实现。
如果这不起作用,有人会推荐另一种方法吗?我应该把它搞定并使用 for 循环(如果没有 stringbuffers,它真的能工作得有多好)?
本质上:将双精度数组中的所有值放入同一个字符串以进行返回的最佳方法是什么?
因此,我试图找到一种方法,使用docker能够轻松地为客户启动测试环境.基本上,我有一个想要安装到Windows docker容器(microsoft/windowsservercore)的自定义软件,我需要能够访问该软件的程序文件夹(C:\ Program Files\SOFTWARE_NAME)as它有一些日志,导入/导出和其他各种配置文件.安装部分很简单,我想在使用docker几个小时后学习它是如何工作的,但是以简单的方式传输文件比我想象的要困难得多.我很清楚这个docker cp命令,但我想要一些允许在文件浏览器中查看文件的东西,以允许测试人员快速/轻松地从容器中查看日志/配置文件.
我花了20多个小时在Docker容器上运行SSH服务器,所以我可以直接进入并移动文件,但我没有运气.我花了大部分时间来尝试配置OpenSSH,我可以安装它,但是我的安装提供的默认配置文件似乎有问题,因为我无法启动并运行,除非我开始它通过命令行手动运行sshd -d.奇怪的是,这运行得很好,但它并不是一个真正可行的解决方案,因为它在调试模式下运行并在连接关闭后立即关闭.我可以提供更多关于我用这个测试过的细节,但看起来它可能是一个死胡同(尽管我觉得这应该非常简单).我已经按照我能找到的每个指南(虽然一半是特定于linux容器),并且没有让它们工作,我发现的一半帖子只是说"你为什么要在你使用ssh时可以只使用内置的docker命令".我想使用ssh,因为从最终用户的角度来看它更简单,我宁愿告诉测试人员ssh到特定的IP,而不是让他们通过命令行与docker交互.
编辑:使用OpenSSH
启动服务器使用net start sshd,报告它成功启动,但是,如果我没有使用以下方法生成至少RSA或DSA密钥,则服务立即停止:
ssh-keygen.exe -f "C:\\Program Files\\OpenSSH-Win64/./ssh_host_rsa_key" -t rsa
Run Code Online (Sandbox Code Playgroud)
并使用以下方法修改权限:
icacls "C:\Program Files\OpenSSH-Win64/" /grant sshd:(OI)(CI)F /T
Run Code Online (Sandbox Code Playgroud)
和
icacls "C:\Program Files\OpenSSH-Win64/" /grant ContainerAdministrator:(OI)(CI)F /T
Run Code Online (Sandbox Code Playgroud)
同样,我正在使用默认提供的sshd_config文件,但我已经尝试了几乎我可以找到的那些设置的每个调整,但没有一个帮助.
我还尝试设置Volumes来执行此操作,但由于我们的软件安装是在编译时在docker中完成的,我想要映射为卷的文件夹已经填充了文件,这似乎使得docker在我尝试时失败在附加卷的情况下启动容器. 这部分文档似乎说这应该是可能的,但我无法让它工作.当我尝试启动容器时说"目录不为空"时继续出错.
编辑:使用的命令:
docker run -it -d -p 9999:9092 --mount source=my_volume,destination=C:/temp my_container
Run Code Online (Sandbox Code Playgroud)
在这一点上,我已经没有想法了,我觉得应该非常简单的事情让我花了太多时间才弄明白.特别让我感到沮丧的是,我看到很多博客帖子都说"只需使用内置的docker cp命令!" 当你要浏览大量文件并查看/编辑它们时,这真的是一个非常糟糕的解决方案.我真的需要一种方法,允许在文件浏览器/记事本++中查看文件.
这里有什么明显的东西让我失踪吗?这怎么这么难?任何帮助表示赞赏.
我试图定义一个静态结构和初始化它,当它被宣布一次值,但我真的不知道我会怎么做.
我打电话在一个循环的功能,我想初始化timespec(特别是tv_sec值)0(排序默认值)在第一次函数被调用,但从来没有一次.
我知道我可以通过执行以下操作来完成整数和其他简单数据类型:
static int foo = 0
但我想用一个结构来做同样的事情,所以它不那么简单.
基本上,我想这样做:static struct timespec ts.tv_sec = 0;但是,这是非法的,所以我需要知道法律形式(如果存在).
救命?