コマンドラインを介して16進数をプログラムに入れる
-
23-09-2019 - |
質問
私がすることができます:
int main(int argc, char** argv) {
unsigned char cTest = 0xff;
return 0;
}
しかし、コマンドラインを介して16進数をプログラムに入れる正しい方法は何ですか?
unsigned char cTest = argv[1];
トリックをしません。それはaを生成します 初期化により、キャストなしでポインターから整数が作成されます 警告。
解決
#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()
最初にそれをanに変換します unsigned long
, 、そして、変換された値がより少ないかどうかを確認するために確認してください UCHAR_MAX
. 。はいの場合、割り当てるだけです cTest
.
strtoul()
の3番目のパラメーターはベースであり、Cスタイルの数値解析を示すために0とすることができます(Octalおよび16進数リテラルは許可されています)。ベース16のみを許可したい場合は、3番目の引数としてそれを渡します strtoul()
. 。任意のベースを許可したい場合(だからあなたは解析することができます 0xff
, 0377
, 255
, 、など)、0を使用します。
UCHAR_MAX
で定義されています <limits.h>
.
Cでこの種のことをする従来の方法は scanf(). 。それはまさにprintf()の逆であり、指定された形式を読み取ります アウト ファイル(または端末)と、それらを書き込むのではなく、リストにリストに入れます。
あなたの場合、あなたは使用するでしょう sscanf
あなたはすでにストリームではなく文字列にそれを持っているので。
atoi
, atol
, strtoi
, strtol
すべて stdlib.h