• 締切済み

バイナリを扱う

str = "aあ" ar = new Array() ここを教えてください。 if(ar[0] == 97 ar[1] == 130 && ar[2] = 160) alert("ok")

  • nearn
  • お礼率36% (25/69)

みんなの回答

  • 665
  • ベストアンサー率72% (18/25)
回答No.2

NetscapeやiCabならescape関数を利用してできます(Shift_JISで保存する必要あり)。 var str = "aあ"; var ar = escape(str).match(/%..|./gi) || new Array(); for (var i = 0; i < ar.length; i++) { ar[i] = Number("0x" + ar[i].substr(1, 2)) || ar[i].charCodeAt(0); } if (ar[0] == 97 && ar[1] == 130 && ar[2] == 160) { alert("OK"); } もしIEなど他のブラウザで同じことをしようと思えばShift_JISのマップでも作らないと無理でしょうね。 参考サイトで公開されているライブラリを利用するといいように思います。 EscapeSJIS関数を改造するか、上記のescape(str)をEscapeSJIS(str)に書き換えると目的の効果が得られるかと思われます。

参考URL:
http://nurucom-archives.hp.infoseek.co.jp/digital/escape-codec-library.html
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ちょっと意味がよくわからないので、 質問の意味や意図を補足していただけますか? 文字列をシフトJISコードとして1バイトずつ扱い、そのコードを表す数値と比較するというような意味だとしたら、 昔のブラウザ(ネスケのjavascript1.2以前)なら別ですが、 現在のブラウザでは、文字コードはUNICODE(ユニコード)で扱うようになっていますので文字コードをシフトJISとして扱うことはできません。

関連するQ&A

  • 配列の比較について

    Javascritpで配列全体の比較を行いたいのですが 下の結果が「違います」のように表示させたいのです。 比較の部分はどのように書いたらよいのでしょうか? var a1 = new Array(); var a2 = new Array(); a1['a'] = 1; a1['c'] = 2; a2['a'] = 1; a2['c'] = 3; //=========== 以下の配列の比較方法 if (a1 == a2){ alert('同じです'); } else { alert('違います'); }

  • 文字列と配列の振る舞いの違いについて

    以下のコードで出るalertが Array => 12 String => 2 となります。この原因といいますか原理をご存じでしたら教えていただけませんでしょうか。お願いします。 =========================================================== var test = function(name){ this.arr.push(name); this.str += name; } test.prototype = { arr:[], str:"" } var r = new test("1"); var z = new test("2"); alert("Array => " + z.arr.join("") + "\nString => " + z.str);

  • JAVAの配列関連

    java の配列について質問があります。 わかりそうでわからない、というところであります。 【質問】 以下のような要素数の不明な配列を1つの文字列にする場合 どの様に処理したら良いのでしょうか。 ただし、array には何らかの文字列が既に入っているとします。 (どのように for 文などでくくれば、上手く出来るでしょうか。) ArrayList<String> array = new ArrayList<String>(); int size = array.size(); String str = null; if(size == 0){    str = (array.get(0)); } else if(size == 1){    str = (array.get(0) + "," + array.get(1)); } else if(size == 2){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2)); } else if(size == 3){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2) + "," + array.get(3)); } else if(size == 4){    str = (array.get(0) + "," + array.get(1) + "," + array.get(2) + "," + array.get(3) + "," + array.get(4)); }・・・ この if文 の部分を for文 ですっきりさせたいのですが どうにも思いつきません。 ご存知の方いらっしゃいましたら お力添えをお願いいたします。

    • ベストアンサー
    • Java
  • in windowと変数

    おそらく初歩的な質問ですいませんが2つ、 つまってしまったのでご教授ください。 var k = new Array("a","b","c"); var i=new Array[[],["1","aa","bb"],["1","aa","bb"],["1","aa","bb"]]; str=k[0];//もしくは0~2 if("i[str]" in window){ //処理 } こういった判定式があったとき 1: 上記では「存在しない」と判定されますがどのように記述したらいいのでしょうか? 2: in windowを否定(i[str]が存在しない場合)という書き方はどのようになるのでしょうか?

  • 再帰的に処理をする方法

    まとめてサニタイズする方法として下記のように書いてみました。 引数が配列でなければ問題ないのですが、配列だとこんなエラーが出ます。 Warning: array_map() expects parameter 1 to be a valid callback, function 'sanitize' not found or invalid function name in ファイル名 foreachでまわすのも考えましたが、できるならスマートにと思っているのですが どうすれば再帰的な処理ができるでしょうか? $valid = new Valid(); $array = array( 'あああ','いいい','ううう', ); $valid->sanitize( $array ); class Valid{ public function sanitize( $str ){ if ( is_array( $str ) ) return array_map( 'sanitize', $str ); return str_replace( "\0", '', $str ); } }

    • ベストアンサー
    • PHP
  • phpのin_array()でわからない事があります。

    phpのin_array()でわからない事があります。 $str = array('リンゴ','オレンジ','バナナ'); if(in_array("オレンジ",$str)){ print "OK"; }else{ print "NG"; } 結果:OK 上記は何の問題もないのですが、 $str = @file('hoge.txt'); if(in_array("オレンジ",$str)){ print "OK"; }else{ print "NG"; } 結果:NG // hoge.txt リンゴ オレンジ バナナ こうするとNGになってしまいます。 最近PHPを始めたばかりで根本的な事がわかってないのかも知れませんが、 もし原因をご存じの方がいれば教えていただけないでしょうか。 すみませんがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • if~else ifの処理を配列とループを使用して記述したい

    aのときはAの処理、bのときはBの処理、cのときはCの処理をを行い、ただし条件が真になったら以降の条件を判断しないといった処理(1)を、ループを用いて実現したいと考えております。 色々と試行錯誤したのですが(2)、なかなか実現することができず、困っております。 つきましては恐れ入りますが、正しい記述方法をご教授いただけないでしょうか。JAVAスクリプト全くの初心者ですが、何卒よろしくお願いいたします。 (1) txt = "abcd";//判断対象文字列 data0=txt.match(/a[^\&\"]*d/im); data1=txt.match(/a[^\S<>\&\"]*b/im); data2=txt.match(/b[^\S<>\&\"]*c/im); alert0="A"; alert1="B"; alert2="C"; //条件が合致しない時は警告を発し、合致する時には指定ページを表示します。 if (!data0) {alert(alert0)}; else if (!data1){alert(alert1)}; else if (!data2){alert(alert2)}; else location.href = "ok.htm"; 以上の処理をループを用いて実現したいと考え、一応以下のように記述してみたのですが、動作しませんでした。また、条件が真になったら、以降の条件を判断しない方法も分かりません。何卒よろしくお願いいたします。 (2) for(a=0;a<=2;a++){ var aler=new Array(2); var data=new Array(2); aler[0]=alert("A"); aler[1]=alert("B"); aler[2]=alert("C"); txt = "abcd"; data[0]="(/a[^\&\"]*d/im)"; data[1]="(/a[^\S<>\&\"]*b/im)"; data[2]="(/b[^\S<>\&\"]*c/im)"; if (!txt.match data[a]) { aler[a]; } else location.href = "ok.htm"; }

  • 簡単な配列の作り方

    やりたいことがあるのですが、原始的なやり方しか思いつきません。 簡単な方法があればご教授願いたく思い質問いたしました。 よろしくお願いします! <やりたいこと> 明細行が5件ありまして、それぞれの行に有効かどうかフラグがある。 5件のうち有効になっている数だけの配列を作成する。 --------------------------------------------- 例1)1,2,3,4,5のうち2,3,5の3行が有効の場合   String[] str = String[]{2,3,5} 例2)1,2,3,4,5のうち4の1行が有効の場合   String[] str = String[]{4} --------------------------------------------- <現在やっていること> // 有効行の判断用 private boolean yukoFlg1 = false; private boolean yukoFlg2 = false; private boolean yukoFlg3 = false; private boolean yukoFlg4 = false; private boolean yukoFlg5 = false; // 有効行の数 private long yukoCnt = 0; /** * 該当行分の配列にする String[] * @param str 配列にしたい値 */ public String[] setStrArray ( String str1, String str2, String str3, String str4, String str5) throws Exception { String[] result = null; // 有効行の数が1の場合 if (yukoCnt == 1) { if (yukoFlg1) { result = new String[]{str1}; } else if (yukoFlg2) { result = new String[]{str2}; } else if (yukoFlg3) { result = new String[]{str3}; } else if (yukoFlg4) { result = new String[]{str4}; } else { result = new String[]{str5}; } // 有効行の数が2の場合 } else if (yukoCnt == 2) { if (yukoFlg1) { if (yukoFlg2) { result = new String[]{str1, str2}; } else if (yukoFlg3) { result = new String[]{str1, str3}; } else if (yukoFlg4) { result = new String[]{str1, str4}; } else { result = new String[]{str1, str5}; } } else if(yukoFlg2) { if (yukoFlg3) { result = new String[]{str2, str3}; } else if (yukoFlg4) { result = new String[]{str2, str4}; } else { result = new String[]{str2, str5}; } } else if (yukoFlg3) { if (yukoFlg4) { result = new String[]{str3, str4}; } else { result = new String[]{str3, str5}; } } else { result = new String[]{str4, str5}; } // 有効行の数が3の場合 } else if (yukoCnt == 3){ if (yukoFlg1) { if (yukoFlg2) { if (yukoFlg3) { result = new String[]{str1, str2, str3}; } else if (yukoFlg4) { result = new String[]{str1, str2, str4}; } else { result = new String[]{str1, str2, str5}; } } else if (yukoFlg3) { if (yukoFlg4) { result = new String[]{str1, str3, str4}; } else { result = new String[]{str1, str3, str5}; } } else { result = new String[]{str1, str4, str5}; } } else if (yukoFlg2) { if (yukoFlg3) { if (yukoFlg4) { result = new String[]{str2, str3, str4}; } else { result = new String[]{str2, str3, str5}; } } } else { result = new String[]{str3, str4, str5}; } // 有効行の数が4の場合 } else if (yukoCnt == 4) { if (!yukoFlg1) { result = new String[]{str2, str3, str4, str5}; } else if (!yukoFlg2) { result = new String[]{str1, str3, str4, str5}; } else if (!yukoFlg3) { result = new String[]{str1, str2, str4, str5}; } else if (!yukoFlg4) { result = new String[]{str1, str2, str3, str5}; } else { result = new String[]{str1, str2, str3, str4}; } // 有効行の数が5の場合 } else { result = new String[]{str1, str2, str3, str4, str5}; } return result; }

    • ベストアンサー
    • Java
  • javascript で undefinedと表示されます

    全ての変数、配列に alert(typeof variable); を試しましたが undefinedが見つかりません。 function a{ var lastdayArray = new Array ('','31','28','31','30','31','30','31','31','30','31','30','31'); var weekArray = new Array ('日','月','火','水','木','金','土'); var a = new Date(); var b = new Date(); var mymonth = a.getMonth()+1; var nextmonth =mymonth +1 ; var myyear = a.getYear()+1;   var today = a.getDate(); var maxbox = 36; var sday = a.setDate(1); var nday = b.setDate(1); var nmonth = b.setMonth(mymonth); var nwday = b.getDay(); var fwk = a.getDay(); var nfday = 6 - nwday; var fline = 6 - fwk; var nextlsday = lastdayArray[mymonth]; var lsbox = (fwk + lastdayArray[mymonth]) +1; var monthArray = new Array(mymonth,nextmonth); var monthflg = new Array(fwk,nfday); var nextflg = new Array(fline,nwday); var s_no0 = 1;   var s_no1 = 1; //数値代入変数       var s_no2 = 1; var s_no3 = 0; var s_no4 = 0; var s_no5 = 0; var s_no6 = 0; var s_no7 = 0; var s_no8 = 0; var schedule_no = new Array(s_no0,s_no1,s_no2,s_no3,s_no4,s_no5,s_no6,s_no7,s_no8); var s_str0 = 'a'; var s_str1 = 'a'; //文字列代入変数 var s_str2 = 'a'; var s_str3 = 'a'; var s_str4 = 'a'; var s_str5 = 'aa'; var s_str6 = 'a'; var s_str7 = 'a'; var s_str8 = 'a'; var schedule_str = new Array(s_str0,s_str1,s_str2,s_str3,s_str4,s_str5,s_str6,s_str7,s_str8); for(var x = 0; x < 2; x++){ daycount = 0; document.write(monthArray[x] + '月の予定'); if(nmonth == 12){nmonth = 0;} document.write('<table width="73%" height="337" border="1" cellpadding="1" cellspacing="1">'); //曜日出力 document.write('<tr>'); for(var l = 0 ; l <= 6; l ++){ if(l == 0){ weekArray[l] = (weekArray[l].fontcolor('#ff1493').fontsize(4)); } else if(l == 6){ weekArray[l] = (weekArray[l].fontcolor('#87ceeb').fontsize(4)); } document.write('<td>' + weekArray[l] +'</td>');} document.write('</tr>'); //曜日を判定しテーブル出力 document.write('<tr>'); //空ボックス出力 if((monthflg[x]) != 6 ){ for(var k = 0; k < (monthflg[x]); k++){ document.write('<td>' + '&nbsp;' +'</td>'); } } if((monthflg[x]) == 0){ for(var y = 0; y < 6 ; y++){ document.write('<td>' + '&nbsp;' +'</td>'); } if((schedule_no[y]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[y] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } else{ //空ボックスの数~土曜日まで出力 for(var m =0 ; m <= nextflg[x]; m++){ if((schedule_no[m]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[m] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } } document.write('</tr>'); //行出力 for(var i =0 ; i < 4; i++){ document.write('<tr>'); //列出力 for(var j =0 ; j < 7; j++){ if(daycount < lastdayArray[monthArray[x]]){ daycount ++; document.write('<td>' + daycount +'</td>'); } else{ document.write('<td>' + '&nbsp;' +'</td>'); } } document.write('</tr>'); } //最終行出力 if(daycount < lastdayArray[monthArray[x]]){ document.write('<tr>'); for(var p =0 ; p < 7 ; p++){ if(daycount < lastdayArray[monthArray[x]]){ if((schedule_no[p]) === daycount){ daycount ++; document.write('<td>' + daycount + schedule_str[p] +'</td>'); } else { daycount ++; document.write('<td>' + daycount +'</td>'); } } else{ document.write('<td>' + '&nbsp;' +'</td>'); } } document.write('</tr>'); } document.write('</table>'); } }

  • メソッドの分割(リファクタリング?)

    指導教官からプログラム自体には問題はないが長すぎるのでメソッドを分割したほうがよいといわれました。以下に書きます(一部改変) try{ System.out.println("1. 2. どちらかを選択してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); int res = Integer.parseInt(str); if(!str.matches("[1-2]+")){ System.out.println("1、2から選択してください。"); continue;} if(res == 1){ System.out.println("キーワードを入力"); reader = new InputStreamReader(System.in); br = new BufferedReader(reader); str = br.readLine(); String sql = "SQL文"; ResultSet result = stmt.executeQuery(sql); //vectorにデータを格納 Vector vector1 = new Vector(); String[] array1 = new String[2]; while(result.next()){ array1[0] = result.getString("Res1"); array1[1] = result.getString("Res2"); vector1.addElement(array1); array1 = new String[2];} for(int i = 0;i < vector1.size();i++ ){ String Res1 = null;  String Res2 = null; String[] str1 = (String[])vector1.get(i); Res1 = str1[0]; Res2 = str1[1]; System.out.println("Res1,Res2は" + Res1 + "\t" + Res2);}} if(res == 2){1と同様なので省略・・}} catch(IOException e){ System.out.println(e + "例外が発生しました");} }} メソッドの分割のコツはあるのでしょうか?お勧めの本はございますか? 長くてすいません。

    • ベストアンサー
    • Java

専門家に質問してみよう