[解決済み] C言語による16進数文字の印刷
2022-02-18 17:59:10
質問内容
文字列を読み込んで、その文字の16進数相当をプリントアウトしようとしている。
例えば、以下のような文字列があったとします。
"0xc0 0xc0 abc123"
で、最初の2文字が
c0
を16進数で表し、残りの文字は
abc123
をASCIIで表示した場合、次のようになります。
c0 c0 61 62 63 31 32 33
しかし
printf
を使って
%x
は私に
ffffffc0 ffffffc0 61 62 63 31 32 33
を使わないで、欲しい出力を得るにはどうしたらよいでしょうか?
"ffffff"
? また、なぜc0(と80)だけが
ffffff
他の文字にはないのですか?
どのように解決するのですか?
を表示させています。
ffffff
なぜなら
char
はあなたのシステム上で署名されています。C言語では、次のようなvararg関数があります。
printf
よりも小さいすべての整数を昇格させます。
int
から
int
. このため
char
は整数 (この例では 8 ビット符号付き整数) であるため、文字列は
int
sign-extensionで。
以来
c0
と
80
は先頭が1ビットなので(8ビット整数では負)、符号拡張されていますが、他のサンプルでは符号拡張されていません。
char int
c0 -> ffffffc0
80 -> ffffff80
61 -> 00000061
これが解決策です。
char ch = 0xC0;
printf("%x", ch & 0xff);
これは、上位ビットをマスクして、必要な下位8ビットだけを残すものです。
関連
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] JavaScriptで10進数から16進数へ変換する方法
-
[解決済み] なぜ16進数には0xがつくのですか?
-
[解決済み】整数を16進数に変換する方法
-
[解決済み】C/C++の文字('a')の大きさについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。