struct tag_t_ {
u_int8_t op;
u_int8_t num;
u_int32_t labels[5];
};
Run Code Online (Sandbox Code Playgroud)
在上面的结构中,64位编译器将在哪里添加填充字节?
它是在第一个标签之前还是在第一个标签的末尾?
如果填充位于第一个标签的末尾,那么在访问(读取)32 位拱形中的第一个标签时是否会导致任何错误结果?
我正在寻找一个任意大小的结构,在编译时已知。(用于宏)。
例如:
/* 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 规范的一部分吗?或者这就是大多数编译器的行为方式?
使用 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) 根据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 实现这一目标?
也许可以使用插件?
我想使用 python 来加密一些数据,并发现 pycrypto 作为一个可能的工具。为了加密数据,我需要:
使用 pycrypto,步骤 1-3 相当简单。4给我带来了一点麻烦。我不确定 PKCS7 填充是什么,也不知道如何确保加密不使用 SALT。我希望有人能为我指出正确的方向:第 4 步。
我试图理解为什么在下面的代码中,子级<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
唯一有效的填充是 和left,right和top正在bottom折叠。
谢谢。
我想用 PyTorch 卷积做两件事,文档或代码中没有提到:
我想用这样的固定内核创建卷积:
000010000
000010000
100010001
000010000
000010000
Run Code Online (Sandbox Code Playgroud)
我猜,水平方面就像膨胀,但垂直部分是不同的。我看到 dilation 可以作为代码中的参数使用,但它必须是标量或单元素元组(不是每个维度一个元素),所以我认为它不能在这里做我想做的事。
我希望我的卷积像环形一样“环绕”,而不是使用填充。
我的图像大小不均匀,所以当卷积将其缩小 2 倍时,然后我这样做Conv2DTranspose,我没有得到一致的大小,这是一个问题。
所以我想我应该用额外的行和列填充中间张量,其值与我在边缘看到的值相同,以尽量减少干扰。我如何在 Keras 中做到这一点,这可能吗?我有什么选择?
image-processing padding conv-neural-network keras tensorflow
我试图看看为什么当我移动 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 + …
在C99标准告诉我们:
结构对象内可能有未命名的填充,但不是在其开头。
和
在结构或联合的末尾可能有未命名的填充。
我假设这也适用于任何 C++ 标准,但我没有检查它们。
让我们假设在 ARM Cortex-M 上运行的 C/C++ 应用程序(即在应用程序中使用两种语言)将一些持久数据存储在本地介质(例如串行 NOR 闪存芯片)上,并在上电后读取它循环,可能在将来升级应用程序本身之后。升级后的应用程序可能是用升级后的编译器(我们假设是 gcc)编译的。
让我们进一步假设开发人员很懒惰(当然不是我),并且直接将一些普通的 C 或 C++ 流式传输struct到闪存,而不是像任何偏执的有经验的开发人员那样首先将它们序列化。
事实上,有问题的开发人员很懒惰,但并非完全无知,因为他阅读了AAPCS(Arm 架构的过程调用标准)。
除了懒惰之外,他的理由如下:
structs 以避免在应用程序的其余部分出现未对齐问题。offsetof和 total sizeof)完全struct由 AAPCS为任何 C 或 C++ 确定。不过,开发者是有良心的,他有点担心:
我的问题是:那个懒惰的开发人员的生活有多危险?换句话说,struct在上述假设下,填充在 C/C++ 中的稳定性如何?
在提出这个问题两周后,收到的唯一答案并没有真正回答所提出的问题。我也在ARM 社区论坛上问过完全相同的问题,但根本没有答案。
然而,我选择接受3246135作为答案,因为:
我将没有正确答案视为与此案非常相关的信息。软件问题解决方案的正确性应该是显而易见的。在我的问题中所做的假设可能是正确的,但我无法轻易证明。此外,如果假设不正确,在一般情况下,后果可能是灾难性的。
相比风险,开发者在使用答案中暴露的策略时的负担似乎非常合理。假设一个恒定的字节序(这很容易强制执行),它是 100% …
padding ×10
c ×4
encryption ×2
struct ×2
64-bit ×1
abi ×1
arm ×1
c++ ×1
chart.js ×1
chart.js2 ×1
convolution ×1
convolutional-neural-network ×1
cryptography ×1
css ×1
html ×1
javascript ×1
keras ×1
openssl ×1
pycrypto ×1
python ×1
pytorch ×1
ruby ×1
tensorflow ×1