c - 在C中,检查字符串中的偏移量并计算字节数

标签 c byte ascii bitmask

关于我之前询问过的作业的进一步帮助。从 stdin 读取字符串后,它会检查是否有任何非 ascii 字符。它找到的任何内容都将以十六进制和零偏移量显示它的值。我让它显示十六进制就好了,但我很难弄清楚如何显示偏移量。这是我提出这个问题时的当前代码,仅显示相关行。

#define MASK 0x80

auto int inChar;

if ((inChar & MASK) == MASK)
{
    printf("NON-ASCII INPUT: %x detected at offset %#x \n", inChar, inChar);
    nonascii = 1;
}

还有一件事我需要帮助,希望这会更容易回答。如果读取的行只有 ASCII,则照原样写出并显示读取的总字节数。我知道如何通过简单地计算 do while 完成的次数来使用整数和乘法来完成此操作,但教授似乎希望我们以更直接的方式来完成。

这是我编写时的代码。

if (nonascii == 0)
    printf("The input stream was pure ASCII with a total of %d bytes read", (numBytes &= inChar));

非常感谢那些帮助我的人。

最佳答案

inChar 包含读取的字符的;它不包含有关字符在字符串中位置的信息,因此无法计算出此变量的偏移量。

看的地方就是在inChar中填入当前字符的地方;不幸的是,我们看不到那部分代码。最有可能的是,此时您正在从字符串中的某个索引中提取值,您应该只使用相同的索引变量来显示偏移量。另一种可能性是您通过在字符串中移动指针来从字符串中提取值。在这种情况下,提取偏移量的方法是使用指针算法:假设您有指向字符串开头的指针 stringstringIter 指向当前处理的字符,然后查看指针彼此之间的距离将告诉您您在字符串中的偏移量:stringIter - string

关于c - 在C中,检查字符串中的偏移量并计算字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253511/

相关文章:

c++ - 防止 clang 扩展聚合类型的参数?

将字符串中每个单词的首字母大写并进行字数统计

C-realloc() : invalid pointer error encoutered

c - 不使用随机函数生成随机数

java - 如何将数据转换为压缩十进制格式

c++ - 从字节和切片中获取位 2 位对

java - JAVA中下图中的按键的Key code是什么?

c - C语言从文件中读取数字

将 ascii 码转换为整数

string - 有没有办法在 CMake 中将字符串(ASCII)转换为十六进制