字节数组为短

时间:2010-08-05 21:18:37

标签: c

我有一个整数val。

data[0]=0;
data[1]=0;
data[2]=(val>>8)%256;
data[3]=val%256;

我该怎么做?如何从char数组中获取int?

5 个答案:

答案 0 :(得分:5)

对于无符号数据:

val = (data[2] << 8) | data[3];

签名数据:

val = ((data[2] << 8) & 0xff00) | (data[3] & 0xff);

答案 1 :(得分:0)

简单方法:

int myint = mybyte[0]<<24+mybyte[1]<<16+mybyte[2]<<8+mybyte[3];

假设这是你的位顺序,而且它们都是无符号的。您可能必须将字节转换为整数以确保它们不会换行(11001100 - > 11001100,0000000而不是11001100)。

一种非常奇怪的方式(虽然可能更快)可能是一些有问题的合法指针:

int * myintp= mybyte;
int myint = *myintp;

我根本没有对此进行过测试,但它理论上应该可行,假设长度合适等等。它仍然可能不是一个好主意。

答案 2 :(得分:0)

mod是一项非常昂贵的操作,特别是对于保存32位int。你可能只是想要memcpy。如果你担心可移植性抛出一个htonl:

#include<string.h>

uint32_t x = 12;
char data[4];
memcpy(data, &x, sizeof(x)); 

换句话说你可以反过来:

memcpy(&x, data, sizeof(x));

答案 3 :(得分:0)

你总是可以尝试结合:

typedef union {
    int      i;
    uint8_t  bytes[sizeof(int)];
} int_u;

您可以使用它将int转换为字节,反之亦然。但是,请注意字节序问题,如果您使用它来在平台之间传输数据。

答案 4 :(得分:-3)

只需遍历元素并执行Int.Parse