我需要检查字符串值,如果是一个十六进制值为0d0a的字符串,我需要在循环时断开。
如何检查这个,因为那些是不可打印的字符?
答案 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编码)并且文档更清晰。