【发布时间】:2016-08-31 00:03:28
【问题描述】:
我正在使用 PPM 格式的幻数 P3 http://netpbm.sourceforge.net/doc/ppm.html
我有一个很长的 unsigned char 字符空格和换行符。例如,当我将其打印出来时,它会像这样很好地打印出来...
01 30 03 19 02 39 01 91 39 81 45 92 40 29 10 93
02 91 29 04 19 02 19 04 19 03 94 10 92 03 01 19 02
10 02 93 04
等等。 您会看到有些行比其他行长。这个巨大的字符串是从一个文件中读入的,并放入一个 unsigned char * 中。我的问题是,当我去更改值时,说每隔 2 个字符更改一次,例如...
01 becomes 00 //changing the LSB
30 becomes 31
我在执行此操作时遇到了问题。当我到达行尾时,问题就出现了。我的 if 语句没有检测到行尾标记,因此当它去抓取下一个值时,它不会抓取第二个数字,而是抓取第一个数字。
我检测行尾的 if 语句不起作用...
if(num[count] == '\n' || num[count] == '\0' || num[count] == '\r' || num[count]== '\t')
{
count = count + 2;
}
这个 if 语句的目标是检测新行和进度计数 2,所以我摆弄的下一个值将是下一行从 02 开始的 2。我不完全确定为什么我无法检测到行尾标记,因为如果我打印出 unsigned char * 它以上述方式打印新行时肯定会有一些东西。
【问题讨论】:
-
您的换行符使用 2 个字节。
-
所以我应该检测'\'?
-
不行,你需要在 CR 之后直接检测 LF。
-
如果 CR 是 \ 或十六进制数 0x0D,当它可能是 0x0A(可能是 char 值)时,我如何检测它后面的 LF?
-
你前进一个字符然后检查。