题
我可以做这个:
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
不隶属于 StackOverflow