「技術系」カテゴリーアーカイブ

C#で16進数文字列をバイト配列に変換する方法

16進数文字列をバイト配列に変換したい。

「010203」とか「01 02 03」とか16進数の文字列をバイト配列に変換する必要があったのでその方法を調べてみた。

その方法は2種類あったが、次に使おうと思ったときに忘れていそうなので備忘録もかねて記録しておく。

Int32を使用する方法

[csharp]
// 16進数文字列
String[] hexStrings = new String[] { "01", "02", "03", "04" };

// バイト配列
byte[] bytes = new byte[hexStrings.Length];

// 16進数文字列をバイト配列へ変換
for (int i = 0; i < hexStrings.Length; i++ )
{
bytes[i] = (byte)Convert.ToInt32(hexStrings[i], 16);
}
[/csharp]

Convertを使用する方法

[csharp]
// 16進数文字列
String[] hexStrings = new String[] { "01", "02", "03", "04" };

// バイト配列
byte[] bytes = new byte[hexStrings.Length];

// 16進数文字列をバイト配列へ変換
for (int i = 0; i < hexStrings.Length; i++ )
{
bytes[i] = (byte)Convert.ToInt32(hexStrings[i], 16);
}
[/csharp]

hexStringsは「010203」だったらsubstringとか「01 02 03」だったら半角スペースでsplitとかで作ることを想定しています。

どちらも1度intに変換してからbyteにキャストするという点では一緒だ。

スマホ表示でtableが横にはみ出す場合の対処

スマホ表示の困った問題

WordPressで制作されたこのブログのテーマ「Twenty Fourteen」はレスポンシブデザインなのでスマートフォンに表示した場合も見やすく表示されます。

しかし、記事に少し大きめの表を掲載した場合に表だけが横にはみ出てしまい、みっともない表示になってしまいました。

hamidashi

はみ出した分だけ記事幅も小さくなってしまうので文字が小さくて読みにくい。
これはなんとかしなくては。

色々調査し試してみてたどり着いた対処方法がこちら

対処方法

CSSに以下の定義を追加

[css]
div.scroll {
width:100%;
overflow:auto;
}
[/css]

記事のtableにdivを設定

[html]
<div class="scroll">
<table>
</table>
</div>
[/html]

この対処実施後のスマホ表示がこちら
normal

このとおりはみ出した部分は表示されなくなり、記事が適正なサイズで表示されています。

このはみ出した部分は指でスライドすることにより見ることが可能ですが、閲覧者はただ切れているのかスライド可能なのかわかりづらいという問題点は残ってしまいます。

元のはみ出した状態よりは見た目が良いので今のところはこれで良しとしましょう。

WordPressで画面が真っ白になった場合の対処

WordPressである時急に記事の内容どころかブラウザがまっしろになって何も表示されなくなった経験ありませんか?

私もこれが発生して途方に暮れたことがあります。

原因

この事象の前に.phpファイルを編集しませんでしたか?
原因はそのせいかもしれません。

phpの閉じタグの後に空白文字や改行コードが入っているとこの事象が発生するようです。
私は編集後の.phpファイルが以下のようになっていて真っ白になる事象が発生しました。

[php]
<?php // 開始タグ
~コード~
?> // 閉じタグ
←ここに改行コード
[/php]

phpの閉じタグは省略しても良い使用になっているので以下のように書かないのが得策かもしれませんね。

[php]
<?php //開始タグ
~コード~
[/php]

C#でフォームにPDFを表示させる方法

VisualStudioを使用したWindowsアプリ開発でフォームにPDFを表示させなければならない状況となり、調査しましたが、あまりわかりやすく説明されたページが存在しないので今回その方法を整理します。

ツールボックスにアイテムを追加

ツールボックスに追加する前提としてはAdobe Readerがインストールされている必要があると思います。

ツールボックスのすべてのWindowsフォームを右クリックして「アイテムの選択」をクリック

アイテムの追加

表示された画面で「COMコンポーネント」タブを選択し、「Adobe PDF Reader」にチェックしてOKボタンを押下

アイテムの選択

フォームに配置

ツールボックスから前の手順により追加された「Adobe PDF Reader」を選択し、フォームを配置。

フォームに配置

読み込むPDFを指定するコードを記述

フォームのLoadイベントで以下のコードを記述
※フォームに配置された「Adobe PDF Reader」コントロールのNameがaxAcroPDF1の場合の例です。
[csharp]
axAcroPDF1.LoadFile(@"C:\pdf_open_parameters.pdf");
[/csharp]

実行

PDFフォーム実行

上記の手順でPDFが表示されました。
たとえばHelp画面やマニュアル表示に役立ちそうですね。

WordPressのtwentyfourteenの記事幅を変更する

本ブログはWordPressのtwentyfourteenというテーマで作成されています。

twentyfourteenはレスポンシブデザインのテーマであり、スマートフォンでも非常に見やすく、デザインも非常に気に入っているのですが1点不満な点があります。

それは記事欄が狭いことです。

私は記事内に表を用いることがあるのですが、表の列数や文字数をあまり増やすことができずに苦労していました。

そこで今回はtwentyfourteenの記事幅の変更方法を取り上げます。

まずは変更前の画面キャプチャです。

変更前

474

赤枠で囲まれた部分が記事欄となります。

ここのサイズを広くするにはstyle.cssの以下の部分を変更します。

[css]
.site-content .entry-header,
.site-content .entry-content,
.site-content .entry-summary,
.site-content .entry-meta,
.page-content {
margin: 0 auto;
max-width: 474px;
}
[/css]

上記のmax-widthを474pxから600pxへ変更します。

変更後の画面キャプチャは以下となります。

600

赤枠で囲まれた部分のサイズが大きくなっていますね。
このように記事欄のサイズを変更することができました。

サイズを大きくすることのデメリットは今のところ感じていませんのでぜひ試して見てください。

C#やVB.NETでタイトルバーを消す方法

beforeForm

MDIアプリケーションの子フォームを作成する場合に上記の赤枠部分のタイトルバー(正式名称はなんだろう)を消したくなるケースがありますが、その方法は以下となります。

ControlBoxプロパティを変更

まずフォームのControlBoxプロパティをデフォルトのtrueからfalseに変更します。

変更した結果は以下となります。

after1Form

最大化、最小化、×ボタンは消えましたが、この状態だとまだタイトルバーが残ってしまいます。

Textプロパティを削除

Textプロパティに文字列が設定されている(今回の例の場合はForm1が設定されている)ので削除してください。

すると

after2Form

タイトルバーが消えましたね。
Textを消すことによってタイトルバーが消えるのは何か違和感があって、いつも忘れてしまうんですよね。

WordPressの投稿者表示を消す方法

WordPressのテーマ「twentyfourteen」はデフォルトでは投稿者が表示される。
しかし、この投稿者の表示が不要な人も多いだろう。

投稿者はstyle.cssに以下を追加することで非表示にすることができた。

[css]
.single .byline{
display: none;
}
[/css]

WordPressでリンクを新しいタブで開く

今まで気づいていなかったのですが、ビジュアルエディタで追加したリンクをクリックすると現在のタブに表示されてしまっていました。

せっかく見に来てくれたのでそのページのタブは残しつつ、別のタブでリンク先を表示してくれるのが理想だと考えています。(リンク先に移動されてしまうと戻るボタンを押さないと元のページに戻ってこれないので)

アンカータグ(aタグ)のtarget属性に「_blank」を設定できればよいのですが、WordPressの設定でできないだろうかと調べてみたところビジュアルエディタのリンク設定画面にある「リンクを新ウィンドウまたはタブで開く」のチェックボックスにチェックを入れれば良いだけでした。

link

全く特別な設定でもなんでもなく、単純に見落としていただけでした。
今までも何回も見ているのにこのチェックボックスに全く気付かなかったのはお恥ずかしい限りです。

JavaとC#のListアクセス時の動作の違い

C#でListの要素を削除するコードを書いて実行したところInvalidOperationExceptionが発生した。
最初は原因がわからなかったが、foreachの途中でListの要素を削除したことによってループを継続することができなくなったようだ。

C#

[csharp]
try
{
List<String> list = new List<string>();
list.Add("OK");
list.Add("OK");
list.Add("NG");
list.Add("OK");

foreach (String str in list) {
if (str == "NG") {
list.Remove(str);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
Console.ReadLine();
}
[/csharp]

出力結果

場所 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
場所 System.Collections.Generic.List`1.Enumerator.MoveNextRare()
場所 System.Collections.Generic.List`1.Enumerator.MoveNext()
場所 TestCSharp.Program.Main(String[] args)

IEnumeratorインターフェースのmoveNextを利用してループしても同様の結果となった。
ループの途中でListの要素を削除するには以下のようにindex指定でアクセスする必要がある。

[csharp]
List<String> list = new List<string>();
list.Add("OK");
list.Add("OK");
list.Add("NG");
list.Add("OK");

for (int i = 0; i < list.Count; i++ )
{
if (list[i] == "NG") {
list.RemoveAt(i);
}
}

foreach (String str in list) {
Console.WriteLine(str);

}
[/csharp]

OK
OK
OK

ちなみにJavaならIteratorでも問題なく削除できる。
[java]
List<String> list = new ArrayList<String>();
list.add("OK");
list.add("OK");
list.add("NG");
list.add("OK");

Iterator<String> itr = list.iterator();
while (itr.hasNext()) {
if (itr.next().equals("NG")) {
itr.remove();
}
}

System.out.println(list.toString());
[/java]

出力結果

[OK, OK, OK]

言語が変わると思わぬ動作の違いに驚いたりしますね。

WordPressで自動的にpタグが挿入されてしまう事象への対処

今までは発生しなかったのにある時から突然、記事を編集し保存するとpタグ

が自動的に挿入されるようになってしまった。
この事象の解決は一筋縄ではいかなかったので以下に記載しておく。

remove_filterでは直らない

まずググって見つけた対処方法はfunctions.phpを作成し、以下のコードを追加する方法である。
[php]
<?php
// disable default wpautop filter
remove_filter( ‘the_content’, ‘wpautop’ );
remove_filter( ‘the_excerpt’, ‘wpautop’ );
?>
[/php]
実際この対処方法はたくさん検索に表示される。
しかし、私の事象はこの方法では解決しなかった。

プラグインが原因だった

突然発生したので何か設定を変更したところはないかと調べて見たところ原因を見つけた。

TinyMCE Advanced

TinyMCE Advancedプラグイン導入時に上記の赤枠箇所「Stop removing ~」のチェックを入れてしまったことにより発生していたというものである。
改めて英語の記載を見るとこのような動作をして当たり前だ。
導入時に参考にしたサイトの設定を理解せずにそのまま設定してしまったことからこのような事態を招いてしまったという恥ずかしい経験だった。