【问题标题】:How to convert the char[3] from an FLV struct to an int in c/c++如何在 C/C++ 中将 char[3] 从 FLV 结构转换为 int
【发布时间】:2012-07-25 02:39:44
【问题描述】:

我必须从 FLV 文件中读取标签,并且有三个字符可以识别数据长度。我已将它们读入 char dataLength[3],但我不知道下一步该做什么。它是二进制的,而不是 ASCII,所以它不像使用 atoi()char xxx[] = "123" 转换为整数 123 那样简单。这是我的标签的 C 结构:

typedef struct {
  int previousLength;

  char identify; // 8: AUDIO, 9:VIDEO 18: SCRIPT
  char dataLength[3];

  char time[3];
  char timeExt;

  char streamID[3]; // always 0;
  char unused__;
} FLVTag;

我可以从文件中读取标签,但是如何将dataLength 转换为 int?

【问题讨论】:

  • 你不能只转换成 int..?我不确定我理解你到底想做什么。
  • 这三个字符看起来像十进制数还是二进制数?
  • 取决于字节中的内容。小端格式?大端格式? ASCII 十进制/十六进制/八进制数字?
  • 你为什么要把它们读给char[3]?谁告诉你这是 char[3] 值?
  • 你存储在char[3]中的数据格式是什么?

标签: c arrays char int


【解决方案1】:
int length = ((unsigned int)xxx[0]) << 16 + ((unsigned int)xxx[1]) << 8 + ((unsigned int)xxx[2]);

大端根据http://osflash.org/flv

【讨论】:

  • ...dataLength的类型也要改成unsigned char [3]
【解决方案2】:

您可以使用int(char - '0') 将char 转换为对应的十进制整数。例如int('3' - '0') = 3。在C++中,你也可以这样使用字符串流:

stringstream ss;
ss << char;
int n;
ss >> n;

【讨论】:

  • 感谢彩信,它是二进制的。不像将 char xxx[] = "123" 转换为 int 值 123。
  • 对不起,我不知道。你能写出二进制数的例子吗?那样说起来会更容易。
  • 谢谢,我将编辑问题以使其易于理解。
【解决方案3】:

你可以这样做:

int a = (dataLength[0]-'0')*100+(dataLength[1]-'0')*10+(dataLength[2]-'0');

如果这个 char 数组有更多项。你可以使用while循环;

【讨论】:

    猜你喜欢
    • 2022-08-13
    • 2017-11-21
    • 2012-06-04
    • 2015-07-11
    • 1970-01-01
    • 2014-02-07
    • 2013-08-10
    • 2018-02-10
    相关资源
    最近更新 更多