C if语句未能检测到新行



我正在使用PPM格式的幻数P3http://netpbm.sourceforge.net/doc/ppm.html

我有一个非常长的无符号字符,它是字符空间和换行符的秋天。当我把它打印出来的时候,它会很好地打印出来,比如。。。

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

等等。。你可以看到有些线条比其他线条长。这个巨大的字符串是从一个文件中读取的,并放入一个无符号的char*中。我的问题是,当我去改变值时,比如说每2个字符改变一次,比如…

01 becomes 00   //changing the LSB 
30 becomes 31

我在做这件事时遇到了一个问题。当我到达终点时,问题就来了。我的if语句没有检测到行尾标记,因此当它获取下一个值时,它不会获取第二个数字,而是获取第一个数字。

我的if语句检测行尾不起作用。。。

if(num[count] == 'n' || num[count] == '' || num[count] == 'r' || num[count]== 't')
{
     count = count + 2;
}

这个if语句的目标是检测新行和进度计数2,所以我篡改的下一个值将是下一行02中的2。我不太清楚为什么我不能检测到行尾标记,因为如果当我打印出未签名的char*时,它以上面的方式打印出新行,那么肯定会有一些东西。

如果变量num的类型为unsigned char *,则count变量中的每个增量1对应于一个八位字节(即一个字节)的增量。一个八位字节对应两个十六进制值。因此,输入开头的01表示一个八位字节。0表示四个最高有效位,而1表示四个最低有效位。

因此,当您将count增加2时,我假设您在if语句之外也这样做,实际上您跳过了其他所有字符。

如上所述,误解是,您看到打印出来的每个十六进制值都对应,不是一个字节,而是一个字节中的4位。您将要执行的过程描述为"更改LSB"。但你给出的例子实际上是改变最低能指的四位,而不是最低有效字节。

最新更新