C如果字符串是十六进制的0d0a,我该如何比较

时间:2014-06-15 22:38:58

标签: c string hex

我需要检查字符串值,如果是一个十六进制值为0d0a的字符串,我需要在循环时断开。

如何检查这个,因为那些是不可打印的字符?

2 个答案:

答案 0 :(得分:2)

首先,虽然它们不可打印,但您可以使用转义字符'\'表示这些值。在这种情况下,您想要的字符串可以写成“\ r \ n”。 因此,回到您的问题,有几种方法可以检查此字符串,例如:

  • 使用字符串比较函数(如strcmp)对“\ r \ n”

  • 检查独立字节:

    (str[0] == 0xd) && (str[1] == 0xa)
    

    请注意,0xd与'\ r'相同,而0xa可以替换为'\ n'。

  • 您可以检查16位数字0x0a0d(假设像英特尔那样的小端CPU):

    ((uint16*)str)[0] == 0x0a0d
    

    其中uint16必须定义为16位整数。使用此选项时,为字符串保留的内存必须始终大小为> = 2。

编辑(感谢Matt):某些平台强制执行对齐的内存访问,对于那些平台,如果字符串地址不是2字节对齐,则最后一个方法将失败。 x86和x64平台没有这个问题。

答案 1 :(得分:1)

检查字符串是否只包含这两个字符:

if ( 0 == strcmp(my_string, "\x0d\x0a") )
{
    // action to take if it matches
}

如果您的目的是寻找CR-NL对,那么"\r\n"是等效的(以ASCII编码)并且文档更清晰。