我可以做这个:

int main(int argc, char** argv) {
  unsigned char cTest = 0xff;
  return 0;
}

但是,通过命令行将十六进制数量进入程序的正确方法是什么?

unsigned char cTest = argv[1];

不做任何技巧。产生一个 初始化使得从指针的整数无需演员 警告。

有帮助吗?

解决方案

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf("%ld\n", strtol(argv[1], NULL, 16));

  return 0;
}

示例用法:

$ ./hex ff
255

其他提示

我认为有些到达这里的人可能只是在寻找:

$ ./prog `python -c 'print "\x41\x42\x43"'`
$ ./prog `perl -e 'print "\x41\x42\x43"'`
$ ./prog `ruby -e 'print "\x41\x42\x43"'`

是的,只是做一个简单的ajax请求。jquery它会是:

$("#formid").submit(function(){
   $.ajax({
      type: "POST",
      url: "someFileToUpdateTheSession.php",
      data: $(this).serialize(),
      success: function(){
          // Do what you want to do when the session has been updated
      }
   });

   return false;
});
.

和您的PHP:

<?php
   session_start();
   $_SESSION["name"] = $_POST["name"];
   // Add the rest of the post-variables to session-variables in the same manner
?>
.

注意

您需要将名称属性添加到输入字段中。

unsigned char cTest = argv[1];

是错误的,因为 argv[1] 是类型 char *. 。如果 argv[1] 包含类似的东西 "0xff" 您想将与之相对应的整数值分配给 unsigned char, ,最简单的方法可能是使用 strtoul() 首先将其转换为 unsigned long, ,然后检查转换值是小于还是等于 UCHAR_MAX. 。如果是,您可以分配给 cTest.

strtoul()的第三个参数是一个基础,可以指示C型数字解析(允许八分和十六进制文字)。如果您只想允许基础16,请将其作为第三个参数将其传递给 strtoul(). 。如果您想允许任何基础(因此可以解析 0xff, 0377, 255, 等等),使用0。

UCHAR_MAX 定义在 <limits.h>.

在C中做这种事情的传统方式是与 scanf(). 。正是printf()的倒数,读取给定格式 出去 文件(或终端)以及您列出的变量,而不是将其写入其中。

在您的情况下,您会使用 sscanf 由于您已经将其放在字符串而不是流中。

atoi, atol, strtoi, strtol

全部 stdlib.h

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top