我有一个整数val。
data[0]=0;
data[1]=0;
data[2]=(val>>8)%256;
data[3]=val%256;
我该怎么做?如何从char数组中获取int?
答案 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