![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.6ベストアンサー
- 回答日時:
No.4 です。
訂正:複合 → 復号
++++++++++++++++++++++++++++++++++++++
>>配列の中の文字(値)が A から Z までの時に「限り」、13(0x0d) を加えるだけです。
No.4 で述べた、↑のようなプログラム仕様どうのこうの、反省しています。
無用な混乱をさせました。なかったことにして下さい。
>数字も変更されてしまいました。
'0' が '=' になった、ということですよね、「正常」に暗号化されています。
'0' は10進数で、48 という「値」です。これに、13 加えると、61 で、たまたまアスキーコードで、'=' が割り当てられています。
>もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか?
その必要性はありません。
★現状のプログラムで、'q' まで「正常」に暗号化可能です。
★暗号化後の「新たな配列」を、unsigned char にすれば、'q' 以降だって・・( 'r' + 13 → DEL(0x7F)に注意)。
「もともとの配列」を「入れ換える」のではなく、暗号化後の「新たな配列」を用意すべきです。
cChange[ i ] = cOrg[ i ] + iKey;
この cChange[] を int 型にすれば、もっと複雑な「暗号」ができるかも・・(上の「注意」を考えると int にすべき?)。
No.4
- 回答日時:
>配列の中の文字を変更するにはどうしたらいいですか?
「文字」は下のURLのとおり、「値」でもあります。
http://e-words.jp/p/r-ascii.html によると、
AはNに、は、A(0x41) → N(0x4e) だから差分 13(0x0d)
BはOに、は、B(0x42) → O(0x4f) だから差分 13(0x0d)
CはPに、は、C(0x43) → P(0x50) だから差分 13(0x0d)
(()内の 0x 付き表記は16進数です、以降同じ)
で規則性が判明しました、これを用いて、
Z は、Z(0x5a) + 13(0x0d) で g(0x67)
>配列の中の文字を変更するにはどうしたらいいですか?
配列の中の文字(値)が A から Z までの時に「限り」、13(0x0d) を加えるだけです。
cStr[ x ] += 0x0d; x 番目の文字コード(中身)に暗号化の数値を加え「文字コード」を変更する。
元々の配列の中身(文字コード)が A から Z 間でない場合については、質問文からは不明で、
例えば、元々の文字配列 gggZgggZZ を暗号化すると、ggggggggg となり複合不能です。
★「文字コード」と「文字」の対応を、先のURLで確認することで、スッキリすると思います。
この回答への補足
>元々の配列の中身(文字コード)が A から Z 間でない場合については、質問文からは不明で、
>例えば、元々の文字配列 gggZgggZZ を暗号化すると、ggggggggg となり複合不能です。
やっと+13して変更することができました!
・・・できましたが、数字も変更されてしまいました。
もともとの配列をA~Zの間のみの場合にする場合はどうすればいいのでしょうか?
No.3
- 回答日時:
> アルファベットのAはNに、BはOに、CはPに・・・とZまで文字を入れ換える
これだけでは、アルファベットを13文字ずらしたいのだろうということは想像できますが、Zより13前以降のアルファベット、小文字、スペース、数字をどう扱うのかよくわかりません。
とりあえずそういう細かいことは後回しにするとしたら、アスキーコード表をみればどうしたら文字が変わるか見当がつくと思います。例えば、'A'(0x41)を'N'(0x4e)にしたいなら、'A'+13 すればいい。
> その各配列に代入する方法を質問しにきました・・・
こういうことをしたいのではなくて?
char plane[5] = "ABCD";
char cipher[5];
for(i=0; i<4; i++){
cipher[i] = plane[i] + 13;
}
cipher[4] = '\0'; // 文字列として締める(これも暗号化するの?)
No.2
- 回答日時:
わざとぼかしているので、足りない部分は自分で補うこと
char moto[];
char ato[];
char key[26 * 2] = {NOC…noc…};
if( ('A' <= moto[]) && (moto[] <='Z') )
{
ato[] = key[moto[] - 'A'];
}
else
{
ato[] = key[moto[] - 'a'];
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Wi-Fi・無線LAN ルーターの暗号化キーはなぜ初期値から変更するの? 2 2022/08/11 16:28
- Perl perlについての質問 2 2022/10/17 15:25
- Java Java 南京錠 2 2023/02/04 11:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
VB.NET 構造体の配列の検索機能...
-
配列の参照渡しで型が一致しま...
-
擬似コード 長さがmの配列でな...
-
C# Listを使わずに2次元配列の...
-
C++ vectorに配列をプッシュしたい
-
パイソンの
-
char型配列をString型にしたい
-
配列で格納したものをmsgboxで...
-
defineを使った配列
-
構造体から平均点を求める方法
-
Excel、VBAのユーザーフォーム...
-
型宣言に現れる * [] () の構文...
-
C# 配列の変数宣言について。
-
c言語乱数について
-
先頭アドレスとは何ですか?
-
どっちのスマートフォンのほう...
-
【C言語】配列の中に配列を入れ...
-
本日までの累計を表示させたい!
-
VBでC言語のポインタみたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報