标签: padding

C 结构的 64 位对齐/填充?

struct tag_t_ {
    u_int8_t op;
    u_int8_t num;
    u_int32_t labels[5];
};
Run Code Online (Sandbox Code Playgroud)

在上面的结构中,64位编译器将在哪里添加填充字节?
它是在第一个标签之前还是在第一个标签的末尾?
如果填充位于第一个标签的末尾,那么在访问(读取)32 位拱形中的第一个标签时是否会导致任何错误结果?

c 64-bit padding

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

单个成员结构的结构填充

我正在寻找一个任意大小的结构,在编译时已知。(用于宏)。

例如:

/* assume sizeof(SomeStruct) could be an odd number,
 * if it is using GCC's 'packed' attribute for eg */
struct {
    unsigned char data[sizeof(SomeStruct)];
} a, *tmp;

tmp = (void *)some_data
a = *tmp;
Run Code Online (Sandbox Code Playgroud)

然而,我担心struct填充可能会增加 的大小,struct因此它比成员更大,我确信单个成员的大小struct将始终是其成员的大小。

所以我的问题是:

我可以依赖单个成员结构始终与其成员大小相同吗?这是 C 规范的一部分吗?或者这就是大多数编译器的行为方式?

c struct padding

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

OpenSSL AES-256-CBC 加密错误,“最终块长度错误”Ruby

使用 Ruby 1.8.6。

我正在编写一个基本服务器,该服务器回显从客户端发送的消息的加密版本,以了解 Ruby 中对称加密的实现。该程序旨在接受套接字连接,共享其密钥,然后对其接收的数据进行加密,然后将其发送回客户端程序。然后,客户端使用共享密钥解密该消息,从而显示回显的消息。

我遇到的问题是返回消息导致“错误的最终块长度(OpenSSL::CipherError)”。进一步检查问题,删除decrypted << chiper.final允许我的客户端程序解密消息,但在末尾添加额外的字符或银行空格。我知道这是因为final关键字删除了额外的填充以允许 CBC 模式的 16 位块加密/解密,但我不知道如何正确工作。

这是简化的服务器代码(我知道这不安全,那不是重点,这只是一个学习应用程序)

require 'socket'
require 'thread'
require 'openssl'
require 'digest/sha1'

class Server 
@@static_id = 1
@connection_no 

@port
@server

@aes_cipher
@key

def initialize(p)
    #setting up server connections
    puts "Starting server"      
    @port = p
    puts "connections on port #{@port} will be accepted"
    @server = TCPServer.open(@port)

    #generate a secret key
    puts "creating secret key..."
    @aes_cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
    @aes_cipher.encrypt
    @key = @aes_cipher.random_key
    @aes_cipher.key = @key
    puts "key: #{@key}" …
Run Code Online (Sandbox Code Playgroud)

ruby encryption openssl cryptography padding

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

如何在 Chart.js 中向垂直刻度(X 轴)添加填充?

根据Chart.js 2.3 版的“刻度配置”,只能为Y 轴(“水平刻度”)上的刻度设置填充:

填充 | 数量 |10 | 刻度标签和轴之间的填充。注意:仅适用于水平秤。

这就像一个魅力:

scales: {
    yAxes: [{
        ticks: {
            padding: 20,
        }
    }],
    xAxes: [{
        ticks: {
             // how to set padding here?
        }
    }]
}
Run Code Online (Sandbox Code Playgroud)

但是他说,草案,我需要对一些填充X轴以及

在此处输入图片说明

如何使用 Chart.js 实现这一目标?

也许可以使用插件?

javascript padding chart.js chart.js2

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

使用 AES-256 和 PKCS7 填充进行加密

我想使用 python 来加密一些数据,并发现 pycrypto 作为一个可能的工具。为了加密数据,我需要:

  1. 输入密码字符串
  2. SHA-256 字符串,给出 AES-256 的密钥
  3. 将敏感数据表示为 9 位字符 (ascii) 的字符串,如果存在,则带有前导 ascii 0(数据将始终采用此格式)。
  4. 在 ecb 模式下,使用 AES-256、NO SALT、使用 RFC2315 中的 PKCS7 填充来加密数据字符串。
  5. 将密文表示为 Base64 (RFC 4648),需要 24 个字符

使用 pycrypto,步骤 1-3 相当简单。4给我带来了一点麻烦。我不确定 PKCS7 填充是什么,也不知道如何确保加密不使用 SALT。我希望有人能为我指出正确的方向:第 4 步。

python encryption padding pycrypto

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

子元素上的填充不会移动父元素的大小

我试图理解为什么在下面的代码中,子级<li>不会<ul>在填充设置为 15px 的情况下移动父级。

body {
  background-color: black;
}

.box {
  background-color: white;
  display: inline-block;
}

.box__list {
   margin: 0;
   list-style: none;
   padding: 0;
   text-align: center;
   font-size: 0;
}

.box__item {
  color: black;
  display: inline;
  font-size: 14px;
  vertical-align: middle;
  padding: 15px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">
  <ul class="box__list">
    <li class="box__item">A</li>
    <li class="box__item">A</li>
    <li class="box__item">A</li>
  </ul>
  <ul class="box__list">
    <li class="box__item">A</li>
    <li class="box__item">A</li>
    <li class="box__item">A</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/anon/pen/ZKYbYx

唯一有效的填充是 和leftrighttop正在bottom折叠。

谢谢。

html css padding

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

PyTorch 中的自定义卷积核和环形卷积

我想用 PyTorch 卷积做两件事,文档或代码中没有提到:

  1. 我想用这样的固定内核创建卷积:

    000010000
    000010000
    100010001
    000010000
    000010000
    
    Run Code Online (Sandbox Code Playgroud)

    我猜,水平方面就像膨胀,但垂直部分是不同的。我看到 dilation 可以作为代码中的参数使用,但它必须是标量或单元素元组(不是每个维度一个元素),所以我认为它不能在这里做我想做的事。

  2. 我希望我的卷积像环形一样“环绕”,而不是使用填充。

    编辑添加:我看到有一个未解决的问题,这也提供了一个次优的解决方法。所以,我想还没有“正确”的方法来做到这一点。

padding convolution pytorch convolutional-neural-network

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

Keras - 用边界上的值填充张量

我的图像大小不均匀,所以当卷积将其缩小 2 倍时,然后我这样做Conv2DTranspose,我没有得到一致的大小,这是一个问题。

所以我想我应该用额外的行和列填充中间张量,其值与我在边缘看到的值相同,以尽量减少干扰。我如何在 Keras 中做到这一点,这可能吗?我有什么选择?

image-processing padding conv-neural-network keras tensorflow

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

C中结构的大小与重新排列的变量不同

我试图看看为什么当我移动 struct 变量时 struct 的大小会有所不同,我知道涉及填充,但不清楚它在后台做什么

struct test1 {
    long y;
    int a;
    short int b;
    short int t;
}

sizeof(struct test1) = 16

struct test2 {
    long y;
    short int b;
    int a;
    short int t;
}

sizeof(struct test2) = 24

struct test3 {
    int a;
    long y;
    short int b;
    short int t;
}

sizeof(struct test3) = 24
Run Code Online (Sandbox Code Playgroud)

我知道 test1 的大小是 8 + (4+2+2) 没有填充,但我不明白为什么 test2 不返回相同的结果,8 + (2+4+2) 没有填充。

第三个test3我们看到int需要4bytes + 4 padding,long需要8 bytes,short int需要2bytes + 2bytes + …

c struct padding

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

AAPCS (ARM ABI) 下的 C/C++ 结构填充有多稳定?

C99标准告诉我们:

结构对象内可能有未命名的填充,但不是在其开头。

在结构或联合的末尾可能有未命名的填充。

我假设这也适用于任何 C++ 标准,但我没有检查它们。

让我们假设在 ARM Cortex-M 上运行的 C/C++ 应用程序(即在应用程序中使用两种语言)将一些持久数据存储在本地介质(例如串行 NOR 闪存芯片)上,并在上电后读取它循环,可能在将来升级应用程序本身之后。升级后的应用程序可能是用升级后的编译器(我们假设是 gcc)编译的。

让我们进一步假设开发人员很懒惰(当然不是我),并且直接将一些普通的 C 或 C++ 流式传输struct到闪存,而不是像任何偏执的有经验的开发人员那样首先将它们序列化。

事实上,有问题的开发人员很懒惰,但并非完全无知,因为他阅读了AAPCS(Arm 架构的过程调用标准)

除了懒惰之外,他的理由如下:

  • 他不想打包structs 以避免在应用程序的其余部分出现未对齐问题。
  • AAPCS 为每种基本数据类型指定了固定对齐方式。
  • 填充的唯一合理动机是实现正确对齐。
  • 因此,他认为,填充(以及因此 memberoffsetof和 total sizeof)完全struct由 AAPCS为任何 C 或 C++ 确定。
  • 因此,他进一步解释说,我的应用程序无法解释同一应用程序的早期版本会写入的某些回读数据(当然,假设闪存中数据的偏移量没有在写作和阅读之间变化)。

不过,开发者是有良心的,他有点担心:

  • C 标准没有提到任何填充的原因。实现正确对齐可能是填充的唯一合理原因,但根据标准,编译器可以随意填充尽可能多的内容。
  • 他怎么能确定他的编译器真的遵循AAPCS呢?
  • 他的假设是否会突然被他将开始使用的一些明显无关的编译器标志或编译器升级打破?

我的问题是:那个懒惰的开发人员的生活有多危险?换句话说,struct在上述假设下,填充在 C/C++ 中的稳定性如何?

结论

在提出这个问题两周后,收到的唯一答案并没有真正回答所提出的问题。我也在ARM 社区论坛上问过完全相同的问题,但根本没有答案。

然而,我选择接受3246135作为答案,因为:

  1. 我将没有正确答案视为与此案非常相关的信息。软件问题解决方案的正确性应该是显而易见的。在我的问题中所做的假设可能是正确的,但我无法轻易证明。此外,如果假设不正确,在一般情况下,后果可能是灾难性的。

  2. 相比风险,开发者在使用答案中暴露的策略时的负担似乎非常合理。假设一个恒定的字节序(这很容易强制执行),它是 100% …

c c++ arm padding abi

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