c - 为什么在命令行参数的情况下将命令 char 双指针转换为 char 不起作用?

标签 c command-line-arguments endianness

这是代码

#include <stdio.h>
//#include "ConvertEndianess.h"

typedef unsigned char uint8_t;
void ConvertEndianess(uint8_t* buffAddr, uint8_t length);

void ConvertEndianess(uint8_t *buffAddr, uint8_t length)
{
    uint8_t i;
    uint8_t data;

    for (i = 0U; i < (length / 2U); i++)
    {
        data = buffAddr[i];
        buffAddr[i] = buffAddr[(length - 1U) - i];
        buffAddr[(length - 1U) - i] = data;
    }
} 

int main(int argc, char *argv[]){
    printf("\nNumber Of Arguments Passed: %d\n",argc); 
        if(argc < 3){
                printf("Too Few Arguments\n");
        }
        else if(argc > 3){
                printf("Too Many Arguments\n");
        }
        else{
                printf("data indianess: %s\n",argv[1]);
                ConvertEndianess((uint8_t *)&argv[1], (uint8_t)(*argv[2]));
                printf("data indianess: %s\n",argv[1]);
        }
}

这是我的论点:

./a 11223344 4

在进入转换 API 之前它打印正确,但可能是我犯了一些转换错误,我无法识别它。

有人可以纠正我的错误并解释一下吗?

最佳答案

(uint8_t)(*argv[2])

argv[2] 是一个 char * ,根据您的程序的运行方式,我假设它应该包含缓冲区的大小。由于这是一个字符串 (char *),并且您希望将其转换为数字,因此您需要使用 sscanf 来获取此值:

使用示例:

size_t len;
sscanf(str, "%zu", &len);

然后将 len 作为转换函数的第二个参数传递。

您目前的做法是传递 argv[2] 第一个字符的 ASCII 代码。因此,如果用户说大小是“7”,那么您实际上是将整数55传递给转换函数。

作为旁注,使用 size_t 来表示大小,而不是 uint8_t

关于c - 为什么在命令行参数的情况下将命令 char 双指针转换为 char 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52257039/

相关文章:

parsing - haskell optparse-applicative : parsing a list of records that have multiple fields

Java : DataInputStream replacement for endianness

c - C语言如何在不停止程序的情况下使用scanf?

c - 在结构中打印 Int 打印地址

c - 如何创建字节文件?

c# - 使用 CommandLine lib 解析选项时出现错误的默认值异常

javascript - Protractor - 发送规范/套件名称作为参数

c# - 使用 miscutil 的 C# 和 java big endian 字节之间的区别

java - 用java编写一个判断计算机是大端还是小端的函数

c - 从字符到整数指针的变量存储不能正确检索数据