标签: standards

在 CBC 模式下使用 AES 并在 PKCS#7 内部使用 ISO 10126 填充时,算法标识符是什么?

我想使用 PKCS#7 作为一些加密、签名内容的容器格式,并且我们需要在 CBC 模式下使用 AES 和基于 ISO 10126 的填充。我似乎找不到用于此组合的算法标识符的具体参考。我可以发明自己的工具,但会失去与其他工具的互操作性。

encryption standards aes pkcs#7

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

以正确的格式编写 XML 字符串?

请原谅我缺乏正确的术语,因为我确信有一个术语可以形容这一点。我正在使用原始字符串编写 XML 文本(为了便于使用,不使用任何类型的 XML 生成器/解析器)。但是,我面临一个问题,即我提供的数据中的某些字符脱离了标准化。例如,&符号。当字符串包含此内容时,最终解析器就会被抛出。我如何正确适应这一点并将字符串转换为 XML 标准?

我正在将纯字符串写入字符串列表并读取其Text属性,如下所示。请注意该子例程A(const S: String);,它是向 XML 文件添加一行并添加必要的缩进的缩短方法。看子程序Standardize,这是我需要填写的。

uses Windows, Classes, SysUtils, DB, ADODB, ActiveX;

function TSomething.FetchXML(const SQL: String): String;
var
  L: TStringList;
  Q: TADOQuery;
  X, Y: Integer;
  function Standardize(const S: String): String;
  begin
    Result:= S; //<<<--- Need to convert string to XML standards
  end;
  procedure A(const Text: String; const Indent: Integer = 0);
  var
    I: Integer;
    S: String;
  begin
    if Indent > 0 then
      for I := …
Run Code Online (Sandbox Code Playgroud)

xml delphi formatting standards xml-serialization

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

为什么在宏中使用保留名称(以 _ 开头)?

以双下划线开头的标识符在 C 中保留

那为什么我在像Linux内核这样的语句表达式中的代码中经常看到这样的标识符呢?

举个例子,这是container_of宏:

#define container_of(ptr, type, member) ({ \
            const typeof( ((type *)0)->member ) *__mptr = (ptr); \
            (type *)( (char *)__mptr - offsetof(type,member) );})
Run Code Online (Sandbox Code Playgroud)

为什么那里的临时值被称为__mptr保留名称?为什么不只是mptr

c standards gcc identifier

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

为什么下划线在 PSR-0 中被转换为目录分隔符?

我想弄清楚为什么类名中的下划线会被转换为PSR-0 中的目录分隔符?我确信这是有原因的,但我想不出为什么。

如果我有一个my_class_name在命名空间中命名的类,那\namespace\subnamespace 不会转换为\namespace\subnamespace\my\class\name我想要的时间\namespace\subnamespace\my_class_name吗?我知道如果我的类系统是围绕这个构建的,它会起作用,但是如果我想要目录分隔符,我将只使用反斜杠而不是下划线。

php standards psr-0

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

PHP:通过点表示法访问嵌套对象属性

通过“点概念”字符串访问对象的嵌套属性的简单方法是什么?

例如:

#..........................Classes..........................

class Colour            |   class Eye       |   class Person
{                       |   {               |   {
    $hexValue = #36ff00 |       $colour;    |       $eyes;
}                       |   }               |   }

#..........................Example..........................

$john = new Person;

$eyes = [new Eye, new Eye];

$eyes[0]->color = new Colour;

$eyes[1]->color = new Colour;

$john->eyes = [new Eye, new Eye];

#..........................Question..........................

# How can we do something like this?

$eyeColour = Helper::dot($john, 'eyes[0].colour.hexValue'); 
Run Code Online (Sandbox Code Playgroud)

javascript php oop standards coding-style

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

字节真的是最小可寻址单位吗?

C11 标准的第 3.6 节将“字节”定义为“数据存储的可寻址单元......以保存......字符”。

C++11 标准的第 1.7 节将“字节”定义为“C++ 内存模型中的基本存储单元……包含……字符”。

这两个定义都没有说“字节”是最小的可寻址单位。这是因为标准有意从特定机器中抽象出来吗?您能否提供一个真实的机器示例,其中 C/C++ 编译器决定“字节”长/短于最小可寻址单元?

c c++ standards memory-model language-lawyer

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

ARM 调用约定是否允许函数不将 LR 存储到堆栈?

正如标题所说,我在理解 ARM 架构的调用约定时遇到了问题。特别是,当你调用一个子程序时,我仍然很难知道 LR 寄存器会发生什么。

我认为当你进入一个子程序时处理 LR 寄存器的最明显和更安全的方法是将它存储到堆栈中,但这种行为没有出现在文档中,所以我想到了下面的例子。

我将用 C 语言编写它,因为我认为用 C 语言更容易解释。想象一下你只有两个函数

void function_1(void){
   //some code here
}

void function_2(void){
   //some code here
   function_1();
   //some code here
}
Run Code Online (Sandbox Code Playgroud)

我在里面使用 LR 寄存器的function_1方式就像我之前说的那样,我将它的值存储在堆栈中,但如果你看得更近,function_1 不会调用任何其他子例程,因此这是不必要的。

是否有可能在使用 ARM 编译器时,该编译器会决定将 LR 存储到堆栈中?

我在此信息中心网站阅读了有关呼叫标准的信息

assembly standards arm calling-convention

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

为什么成员类型需要前向声明而成员函数不需要?

struct A
{
    void f1()
    {
        f2(); // ok, though f2() is not declared before
    }

    void f2()
    {}

    void f3(X*) // error: unknown type name 'X'
    {}

    struct X
    {};
};

int main()
{
    A a;
}
Run Code Online (Sandbox Code Playgroud)

为什么成员类型需要前向声明而成员函数不需要?

c++ standards types class member-functions

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

当前一行有多个“if”语句时,C++“else”语句

下面的 C++ 程序

#include <iostream>

int main() {
    for(int i=0; i<5; i++) for(int j=0; j<5; j++){
        if(i==1) if(j==2) std::cout << "A " << i << ' ' << j << std::endl;
        else std::cout << "B " << i << ' ' << j << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产出

B 1 0
B 1 1
A 1 2
B 1 3
B 1 4
Run Code Online (Sandbox Code Playgroud)

由此我推断“else”语句指的是第二个“if”。

C++ 标准中是否描述了这种行为?有没有理由以这种方式实施它?我直觉地认为“else”指的是第一个“if”。

c++ standards if-statement undefined-behavior

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

为什么在 C++20 的这种情况下仍然需要 `typename` 前缀?

根据/sf/answers/4339380251/

C++20 的新特性之一是Down with typename

在 C++17 中,您必须在几乎所有†依赖上下文中提供 typename 关键字以消除类型与值的歧义。但是在 C++20 中,这个规则放宽了很多。在需要类型的所有上下文中, typename 关键字不再是必需的。

template<typename T>
concept IsOK = true;

template<typename T>
requires IsOK<T::U> // error: use ‘typename T::U’
void f()
{}

struct A
{
    using U = int;
};

int main()
{
    f<A>(); 
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,显然,IsOK概念只能接受类型。

为什么 typename 这里需要?

在线演示

c++ standards typename c++-concepts c++20

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