gpt4 book ai didi

c++ - 将 uint8_t 数据与字符串进行比较

转载 作者:行者123 更新时间:2023-11-30 02:34:12 26 4
gpt4 key购买 nike

这听起来可能有点奇怪,或者问题可能是一个微不足道的问题,但在我生命的大部分时间里,我都在用 PHP 编程(是的,我知道这听起来如何)。所以当我切换到 C++ 时,有些事情对我来说很陌生(PHP 习惯的原因)。

所以我正在使用结构加载 wav header 数据。值定义为 uint8_t 类型:

typedef struct  WAV_HEADER
{
uint8_t RIFF[4]; // RIFF
uint8_t WAVE[4]; // WAVE
}

我必须将它们与四个字母的字符串进行比较才能得到类似的东西:

if(wavHeader.RIFF[0] . wavHeader.RIFF[1] . wavHeader.RIFF[2] . wavHeader.RIFF[3] == 'RIFF')
{ do sth }

这应该很容易检查加载的文件是否是 Wave 文件 (*.wav)。感谢您的帮助。

最佳答案

C 和 C++ 中的字符串是 null-terminated . RIFFWAVE 在技术上不是 C 风格的字符串,因为没有空终止符,所以你不能只使用简单的 C/C++ 风格的字符串比较,比如 strcmp。然而,您可以通过多种方式将它们与您想要的字符串进行比较:

  • if (header.RIFF[0] == 'R' &&
    header.RIFF[1] == '我' &&
    header.RIFF[2] == 'F' &&
    header.RIFF[3] == 'F') {//.. }
  • if (strncmp((const char*)header.RIFF, "RIFF", 4) == 0) {//.. }
  • if (memcmp(header.RIFF, "RIFF", 4) == 0) {//.. }

我个人会使用 strncmpmemcmp。他们最终做同样的事情,但在语义上 strncmp 是一个字符串比较函数,这可能使代码更清晰。

strncmp 参见 here .对于 memcmp,请参阅 here .

关于c++ - 将 uint8_t 数据与字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com