如何在c中读取由空格分隔的无符号字符

Posted

技术标签:

【中文标题】如何在c中读取由空格分隔的无符号字符【英文标题】:How to read unsigned char delimited by white space in c 【发布时间】:2014-09-24 00:53:17 【问题描述】:

到目前为止,当我尝试使用我的输入加载一个无符号字符数组时,每个输入字符都被视为一个字符。如何让程序知道我正在输入无符号字符?

输入:86 75 178 98 75 15 78 88

 unsigned char input[256];
 fgets(input,sizeof(input),stdin);
 for(int i=0; input[i] != '\n'; i++)
   printf("%hhu ", (unsigned char) input[i]);
 

现在的输出是“8 6 7 5 1 7 8 9 8....”

我想用输入中提供的数字加载input 数组。

编辑:使用空格作为分隔符来显示第一个无符号字符的结尾会更容易吗?

【问题讨论】:

您可以使用strtol()sscanf()和朋友从字符串中解析多位数字。 您可以使用格式化输入函数,例如scanfsscanf,或者您可以编写一些代码来解析输入并执行字符串到整数的转换。 【参考方案1】:

读取后解析缓冲区。 "%n" 让您知道扫描的范围。

unsigned char input[256];
if (fgets(input,sizeof(input),stdin) == NULL) 
  HandleEOForIOError();


int n;
char *p = input;
unsigned char value;
while (sscanf(p, " %hhu %n", &value, &n) == 1) 
  printf("%hhu ", value);
  p += n;

if (*p != '\0') Handle_LeftOverGarbageInString();

【讨论】:

注意:"%hhu %n"" %hhu %n" 具有相同的效果。 "%hhu" 之前不需要前导空格,但if (*p != '\0') ... 需要" %n" 中的前导空格。

以上是关于如何在c中读取由空格分隔的无符号字符的主要内容,如果未能解决你的问题,请参考以下文章

如何将字节数据从套接字写入 C 中的无符号字符向量? [关闭]

C中的无符号字符连接

C - 结构中的无符号字符

如何在 C++ 中读取由空格分隔的字符串? [关闭]

C#编组来自C++ DLL的无符号字符返回值[重复]

如何在 64 位 Perl 中解压缩(64 位)无符号长整数?