标签: signed

什么是零宽度位域

可能重复:
实际使用零长度位域

为什么有些结构具有零宽度位域,为什么需要它?

struct foo {
  int    a:3;
  int    b:2;
  int     :0; // Force alignment to next boundary.
  int    c:4;
  int    d:3;
};

int main()
{
        int i = 0xFFFF;
        struct foo *f = (struct foo *)&i;
        printf("a=%d\nb=%d\nc=%d\nd=%d\n", f->a, f->b, f->c, f->d);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是

manav@os-team:~/programs/test$ ./a.out
a=-1
b=-1
c=-8
d=0
Run Code Online (Sandbox Code Playgroud)

请解释为什么这些值是负数,以及结构内部这些变量的内存布局?

c signed struct bit-manipulation

16
推荐指数
1
解决办法
8450
查看次数

如何检测C中有符号整数的编码?

ISO C标准允许三种编码方法用于有符号整数:二进制补码,一个补码和符号/幅度.

在运行时检测编码的有效或好方法是什么(或者如果有更好的解决方案,还有其他时间)?我想知道这一点,所以我可以针对不同的可能性优化bignum库.

我计划计算这个,并在每次程序运行时将其存储在一个变量中,所以它不必非常快 - 我假设在程序运行期间编码不会改变:-)

c signed twos-complement ones-complement

15
推荐指数
2
解决办法
569
查看次数

为什么len()返回一个有符号的值?

Go的内置len()函数返回一个签名int.为什么不是uint用来代替?

是否有可能len()返回负面的东西?
据我所知,答案是否定的:

  • 数组:"元素的数量称为长度,永远不会消极."
  • 切片:"任何时候以下关系都成立:0 <= len(s) <= cap(s)"
  • 地图 "地图元素的数量称为其长度".(我在规范中找不到任何明确地将其限制为非负值的内容,但我很难理解地图中的元素少于0个)
  • 字符串 "字符串值是一个(可能是空的)字节序列....字符串s的长度(以字节为单位的大小)可以使用内置函数发现len()"(同样,很难看出序列如何有一个负数字节)
  • 通道 "在通道缓冲区中排队的元素数量(同上)

signed go

15
推荐指数
3
解决办法
2739
查看次数

我应该何时使用std_logic_vector,何时应该使用其他数据类型?

我是VHDL的新手,我很难搞清楚哪些数据类型适合在哪里使用.如果我理解正确,对于综合,所有顶级实体端口都应该声明为std_logic_vector或std_logic,而不是任何其他类型.

但是std_logic_vector不支持算术,所以我应该如何处理呢?

我的直觉告诉我,我应该在顶层使用std_logic_vector,然后在将其传递给其他实体时将其转换为整数数据类型.它是否正确?

什么积分数据类型(整数,无符号,有符号)应该在哪里使用?我理解有符号和无符号之间的区别,但什么时候应该使用整数?

port unsigned signed integer vhdl

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

Coldfusion CFHTTP与SHA512-hmac签署了REST请求主体

我正在尝试在bitfloor.com上向交易API发出签名请求(这是一个REST API)

Bitfloor给了我:

1)API密钥(即6bd2b780-00be-11e2-bde3-2837371c3c3a)

2)密钥(即oaFz62YpmbWiXwseMUSod53D8pOjdyVcweNYdiab/TSQqxk6IuemDvimNaQoA ==)

以下是Bitfloor提出请求的确切说明:

请求必须是端口443(https)上的HTTPS POST请求.每个请求必须包含所需的标头(如下所列).标头识别,验证和验证您的请求以防止篡改.头

bitfloor-key这是由bitfloor提供的唯一标识您的帐户.(即6bd2b780-00be-11e2-bde3-2837371c3c3a)

bitfloor-sign符号字段是请求正文的sha512-hmac,使用与您的api密钥对应的密钥.

要签署您的请求: base64将密钥解码为原始字节(64字节).将这些字节用于http请求正文的sha512-hmac签名.Base64对签名结果进行编码并发送到此标头字段.

bitfloor-passphrase创建此api密钥时指定的密码.如果忘记,我们无法恢复您的密码.您需要创建一个新的API密钥.

bitfloor-version您感兴趣的资源的api版本.当前唯一有效的值是1


经过整整八个小时的反复试验并反复搜索互联网以获取任何洞察力或信息,以下代码尽可能接近我认为可能在如何正确构建请求的方向,唉,无论我接受什么,我的API都会返回"无效签名".

这是我到目前为止所拥有的......

首先,我在网上找到了这个函数,有人写信给SHA512签名:

<cffunction name="HMAC_SHA512" returntype="binary" access="public" output="false">
    <cfargument name="signKey" type="string" required="true">
    <cfargument name="signMessage" type="string" required="true">

    <cfset var jMsg = JavaCast("string",arguments.signMessage).getBytes("iso-8859-1")>
    <cfset var jKey = JavaCast("string",arguments.signKey).getBytes("iso-8859-1")>
    <cfset var key  = createObject("java","javax.crypto.spec.SecretKeySpec")>
    <cfset var mac  = createObject("java","javax.crypto.Mac")>
    <cfset key  = key.init(jKey,"HmacSHA512")>
    <cfset mac  = mac.getInstance(key.getAlgorithm())>
    <cfset mac.init(key)>
    <cfset mac.update(jMsg)>
    <cfreturn mac.doFinal()>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

我不知道它做了什么,但它似乎工作,没有错误.

这是我对此函数的实现以及我尝试发出请求:注意:"nonce"值是必须与请求一起发送的参数.

<cffunction name="myorders">
    <cfset nonce        = dateDiff("s",createDateTime(2012,01,01,0,0,0),now())>
    <cfset requestbody …
Run Code Online (Sandbox Code Playgroud)

api encryption coldfusion signed cfhttp

14
推荐指数
1
解决办法
896
查看次数

混叠漏洞是否适用于签名字符?

在C ++中,存在一个别名漏洞,该漏洞允许通过某些字符类型的指针来读取或写入任何对象的对象表示。

这仅适用于charunsigned char还是适用于signed char

c++ signed char strict-aliasing language-lawyer

13
推荐指数
1
解决办法
637
查看次数

在C左移(char)0xFF由8并将其转换为int

在(char)0xff的左移8,并将其转换为int,我们得到-256或0xffffff00.有人可以解释为什么会这样吗?

#include <stdio.h>
int main (void)
{   
    char c = 0xff;
    printf("%d %x\n", (int)(c<<8),(int)(c<<8));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

-256 ffffff00
Run Code Online (Sandbox Code Playgroud)

c signed char shift

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

为什么std :: abs返回签名类型

当我比较一个std::abs(int)和一个时,我正在收到有关签名与无签名比较的警告unsigned.事实上,std::abs返回签署的值.为什么选择这个?它将解决负值的问题,其绝对值不能用有符号的类型表示.

然后,是否有比这更清洁(即没有演员表)的东西以避免警告?

#include <cassert>
#include <cstdlib>

// max(1, lhs + rhs). (lhs must be > 0)
unsigned add(unsigned lhs, int rhs)
{
  return
    (0 < rhs || static_cast<unsigned>(-rhs) < lhs
     ? rhs + lhs
     : 1);
}

int main()
{
  assert(add(42, -41) == 1);
  assert(add(42, 0) == 43);
  assert(add(42, 1) == 43);
  assert(add(42, -51) == 1);
}
Run Code Online (Sandbox Code Playgroud)

c++ unsigned signed gcc-warning

12
推荐指数
1
解决办法
1501
查看次数

为什么(18446744073709551615 == -1)是真的?

当我在工作时,string::npos我注意到了一些东西,我在网上找不到任何解释.

(string::npos == ULONG_MAX)
Run Code Online (Sandbox Code Playgroud)

(string::npos == -1)
Run Code Online (Sandbox Code Playgroud)

是真的.

所以我尝试了这个:

(18446744073709551615 == -1)
Run Code Online (Sandbox Code Playgroud)

这也是事实.

怎么可能?是因为二元对话吗?

c++ unsigned signed equality integer-overflow

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

使用reinterpret_cast的签名别名

采取以下代码

#include <iostream>

void func() {
    int i = 2147483640;
    while (i < i + 1)
    {
        std::cerr << i << '\n';
        ++i;
    }

    return;
}

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

这段代码显然是错误的,因为while循环仅在有符号的int i溢出(即UB)时才能终止,因此编译器可以例如将其优化为无限循环(Clang在上进行-O3)或执行其他类型的时髦操作。现在我的问题是:从我对C ++标准的阅读中,等同于签名的类型可能会别名(即指针int*unsigned*别名)。为了进行一些时髦的签名“包装”,以下内容是否具有未定义的行为?

#include <iostream>

static int safe_inc(int a)
{
    ++reinterpret_cast<unsigned&>(a);
    return a;
}

void func() {
    int i = 2147483640;
    while (i < safe_inc(i))
    {
        std::cerr << i << '\n';
        ++i;
    }

    return;
}

int main() {
    func(); …
Run Code Online (Sandbox Code Playgroud)

c++ signed memcpy language-lawyer reinterpret-cast

12
推荐指数
2
解决办法
262
查看次数