回答編集履歴

1

追記追加

2017/11/18 01:46

投稿

退会済みユーザー
test CHANGED
@@ -15,3 +15,39 @@
15
15
 
16
16
 
17
17
  一体何がしたいのでしょう?
18
+
19
+
20
+
21
+ **【追記】**
22
+
23
+
24
+
25
+ 質問を読み直して ↓ こういうことではないかと思ったのですが?(大前提として、ホントに Shift_JIS を考えればよいのかという疑問がありますが、そこはちょっと置いといて・・・)
26
+
27
+
28
+
29
+ (1) Shift_JIS コードのバイト列がある。内容と長さは不定。Shift_JIS として不正なコードは入ってない。
30
+
31
+
32
+
33
+ (2) そのバイト列から最大 16 バイトを文字列に変換して出力したい。
34
+
35
+
36
+
37
+ (3) ただし、上記 (1) のバイト列が 16 バイトを超える場合で、かつ最後の 16 バイト目が Shift_JIS の 2 バイト文字(いわゆる全角文字)の第 1 バイトの場合は、バイト列の 15 バイトまでを文字列に変換して出力したい。
38
+
39
+
40
+
41
+ 上記の理解が違う場合はどこがどう違うか指摘してください。
42
+
43
+
44
+
45
+ 理解が合っていれば、PowerShell で書けるのかどうかわかりませんが、(3) ができるようなコードを書くということになります。
46
+
47
+
48
+
49
+ 具体的には、2 バイト文字の第 1 バイトは 16 進数で 80 以上なので、(1) のバイト列を先頭からスキャンして行って、16 バイト目が 1 バイト文字(いわゆる半角)か 2 バイト文字の第 1 バイトなのかを調べて処置するということになります。
50
+
51
+
52
+
53
+ なお、16 バイト目だけ見たのではダメです。必ずバイト列の先頭からスキャンして調べていく必要があります。また、Shift_JIS として不正なコードは入ってないことが条件になります。