gpt4 book ai didi

C if 语句无法检测新行

转载 作者:行者123 更新时间:2023-11-30 17:01:28 25 4
gpt4 key购买 nike

我正在使用 PPM 格式魔数(Magic Number) P3 http://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

等等..您会看到有些线比其他线更长。这个巨大的字符串是从文件中读入的,并放入一个 unsigned char * 中。我的问题是,当我去更改值时,比如说更改每个第二个字符,例如...

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 * 时,它肯定会以上述方式打印新行。

最佳答案

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

因此,当您将计数增加 2 时(我假设您也在 if 语句之外执行此操作),您实际上会跳过所有其他字符。

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

关于C if 语句无法检测新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046549/

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