【技術MEMO】Windows10 1903アップデート(H55DE3)
クリーンインストールしようと思っても、Windowsロゴから全く動かず…。 参った参った。
マザーボードが Asrock の H55DE3 だったので、 BIOSを2.8に Instant Flash で上げて、起動しなおしたらセットアップが動いた。 (※) BIOS の設定は、アップデート後にデフォルトに初期化。
■ BIOS URL https://www.asrock.com/mb/Intel/H55DE3/index.jp.asp#BIOS
■ BIOS更新方法 https://www.asrock.com/support/BIOSIG.jp.asp?cat=BIOS
無事動いてよかった。 ただ、これ見て試す人いる場合は、BIOSの更新は動かなくなる可能性もあるので、 自己責任でお願いしまっす。
【技術MEMO】別スレッドからの画面の更新
自分用のMEMO。
WinFormsで、画面起動時に別スレッド起動で画面更新をずっと行う。 -> 画面終了時に別スレッド終了ってのやろうとしたら、Disposeされてるから例外が出た。
これって、FormClosing のイベントで await かけて終了処理をしたとしても、FormのクローズをCancelしてないから、Disposeまでいってしまうと。
画面終了時に、別スレッドを終了するのではなく、別のアプローチが必要かなと思った。
【NEWS】今日の気になったニュース
【NEWS】今日の気になったニュース
期待したほどでもなかったという評判を良く聞くけど、新型 GeForce 欲しいなぁ。
【技術MEMO】JISからSJIS,SJISからJISへの変換
■ 文字コードの互換性問題に直面
C++のソースからC#に移植する事になったのだが、全角文字の文字コードの問題に直面した。
と、ライブラリを使っているため、C#のEncodingで変換すると結果が合わなかった。
互換性の為、変換処理を書いてみた。
■ JISからSJIS(_mbcjistojms)
前提条件
- 全角文字のみ対象
- 全角文字はエスケープされていない(2バイト単位で来る)
- 1byte目、2byte目共に 0x21(33) ~ 0x7E(126) までが対象範囲
1byte目の変換処理
- 1byte目から 0x21(33) 減算後に、÷2 を実行 (端数は切り捨て)
- 1byte目の元の値が0x5E(94)以下の場合、1.の結果に0x81(129)を加算。それ以外の場合、1.の結果に0xC1(193)を加算。
2byte目の変換処理
- 1byte目の変換前の値が 0x01(1) とのANDの結果、0x01(1)か判定
- 1.の結果が真の場合で、さらに、2バイト目が0x5F(95)以下の場合、2バイト目に0x1F(31)を加算。それ以外の場合は、0x20(32)を加算。
- 1.の結果が偽の場合は、2バイト目に0x7E(126)を加算。
ソースコード(C#)
■ SJISからJIS(_mbcjmstojis)
前提条件
- 全角文字のみ対象
- 1byte目は、0x81(129) ~ 0x9F(159) かつ 0xE0(224) ~ 0xEF(239)までが対象範囲。
- 2byte目は、0x01(1) ~ 0xFE(254) までが対象範囲。(※1)
(※1) _mbcjmstojis は、2byte目が 0x00,0xFF の場合、変換しない。なんでだろ?
1byte目の変換処理
- 1byte目が 0xC1(193)以上か判定。
- 結果が真の場合
2-1. 1byte目から0xC1(193)を減算
2-2. 2-1.の結果を2倍にする
2-3. 2-2の結果に0x21(33)を加算 - 結果が偽の場合
3-1. 1byte目から0x81(129)を減算
3-2. 2-1.の結果を2倍にする
3-3. 2-2の結果に0x21(33)を加算 - 2byte目が、0x9F(159)以上 かつ 0xFF(255)以下の場合、0x01(1)を加算。
- 2byte目が、0x01(1)以上 かつ 0x1E(30)以下の場合、強制的に0xFF(255)とする。(※2)
(※2) 1byte目が、0x01(1)~0x1E(30)の場合に 0xFF(255)になっているのが良くわからん。
2byte目の変換処理
- 0x9E(158)以下か判定。
- 1.の結果が真の場合
2-1. 0x1F(31)を減算した結果が0x60(96)を超過している場合、2バイト目から0x20(32)を減算する。
2-2. 0x1F(31)を減算した結果が0x60(96)を超過していない場合、2バイト目から0x1F(31)を減算する。(※3) - 1.の結果が偽の場合
3-1. 2バイト目から0x7E(126)を減算する。
(※3) 2byte目が、0x01(1)~0x1E(30)の場合に、0x1F(31)を減算するとマイナスとなり桁あふれが起きる。例えば、0x01(1)の場合は、0xE2(226)となる。
ソースコード(C#)
【NEWS】今日の気になったニュース
うーん。 太っ腹!