将char数组转换为整数 [英] Casting a char array to an integer

查看:120
本文介绍了将char数组转换为整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我正在读一个二进制格式,其中4个字节指定字符串的大小。所以我想把4个字符从一个缓冲区读到一个整数。



这是我有的。

  int FileReader :: getObjectSizeForMarker(int cursor,int eof,char * buffer){
//跳过标记并读下4个字符
int cursor = cursor + 4; // skip marker and read 4
char tmpbuffer [4] = {buffer [cursor],buffer [cursor + 1],buffer [cursor + 2],buffer [cursor + 3]};
int32_t objSize = tmpbuffer;
return objSize;

}

想法?



  unsigned char * ptr =(unsigned char *)(buffer + cursor); 
// unpack big-endian order
int32_t objSize =(ptr [0]<< 24)| (ptr [1]<< 16)| (ptr [2] << 8)| ptr [3];


Basically I am reading a binary format where 4 bytes specify the size of the string to follow. So i want to cast 4 chars I am reading from a buffer to 1 integer.

Here is what I have.

int FileReader::getObjectSizeForMarker(int cursor, int eof, char * buffer) {
  //skip the marker and read next 4 byes
  int cursor = cursor + 4; //skip marker and read 4
  char tmpbuffer[4] = {buffer[cursor], buffer[cursor+1], buffer[cursor+2], buffer[cursor+3]};
  int32_t objSize = tmpbuffer;
  return objSize;

}

thoughts?

解决方案

It's pretty easy to do the unpacking manually:

unsigned char *ptr = (unsigned char *)(buffer + cursor);
// unpack big-endian order
int32_t objSize = (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];

这篇关于将char数组转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆