MACアドレス(16進数)
00:00:00:00:00:01 これが引数で指定される。
String str = args[0];
というものがありまして(String型)、
そのコロン:で分けられた数字部分のみをバイト配列に格納したいのですが、そのうまい方法がわかりません。お助けください。
byte mac_addr[0] = Byte.parseByte("0x".concat(str.substring(0,1)));
なんて事もしてみましたが、NumberForamtExceptionが
表示されます。(コンパイルは出来る。)

うむ、分からない。どこが悪いのだろう???
以上

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>コロン:で分けられた数字部分のみをバイト配列に格納したいのですが、そのうまい方法がわかりません。



java.util.StringTokenizer を使いましょう。

例)StringTokenizer st=new StringTokenizer(args[0],":");

これで、st.nextToken() を呼び出せば「コロンで分けられた部分」の文字列を抽出出来ます。

例)
StringTokeinzer st=new StringTokeizer(args[0],":");
String[] s=new String[st.countTokens()];
for(int i=0; i<s.length; i++){
s[i]=st.nextToken();
}

>byte mac_addr[0] = Byte.parseByte("0x".concat(str.substring(0,1))); なんて事もしてみました

public static byte parseByte(String s)

は、文字列表現を基数10として扱うものです。
この場合は、もう1つの parseByte() 。。。

public static byte parseByte(String s, int radix)

を使ってみてください。radix は基数の指定です。

例)mac_addr[0]=Byte.parseByte(str, 16);

これで、基数16として数値の文字列表現(str)を byte型に変換します。

それと、Java の byte は 127 ~ -128 の値しか取りません。ご注意を。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
早速試してみました。
うまく文字列を引き出すことには成功いたし、大変感謝いたします。今まで数十行でやっていたことがたった数行で収まりました。気持ちいいですね。

ところで、str = "a5"で
>例)mac_addr[0]=Byte.parseByte(str, 16);
の時、
>それと、Java の byte は 127 ~ -128 の値しか取りません。ご注意を。
ということで、byteに格納するのは不可能となると考えました。(間違っているかな?)
こうするとうまくMACアドレスを指定できるのですが
mac_addr[0]=(byte)(0xa5);
String型の"a5"を0xa5に指定できる方法はありませんでしょうか?
以上

お礼日時:2003/07/10 23:56

>もっとスマートな方法があれは私も知りたい。



1.4 以上で可なら#5さんのコードが可読性も高いし良さそうな気がします。。。

StringTokenizer を使うか、または substring() などで数字部分のみを抽出してから parseInt() 後に byte にキャストする。。。ってのも、まぁ大まかには同じことなんでしょうけどね・w

ちょっと目先をかえるとしたら。。。

StringBuffer sb=new StringBuffer(args[0]);
int index;
while((index=sb.indexOf(":"))!=-1){
  sb.deleteCharAt(index);
}
long lg=Long.parseLong(sb.toString(),16);
byte[] b=new byte[6];
for(int i=0 ; i<b.lenght ; i++){
  b[i]=(byte)(lg>>(40-i*8));
}

って感じで、一旦区切り文字を排除してから一括で long にしてしまって、後はシフトを使って byte 配列にぶち込むってのもありかな?(それにしても可読性悪過ぎ・w)

ん、なんか話が脱線してしまいましたね。。。申し訳ない(汗
    • good
    • 0

String[] parts = "12:23:45:67:FF:AB".split(":");


byte[] macAddress = new byte[parts.length];
for(int i = 0 ; i < parts.length ; i++){
  macAddress[i] = (byte)Integer.parseInt(parts[i], 16);
  System.out.println(macAddress[i]);
}

でどうですか?

j2sdk1.4必須ですけど・・・。
    • good
    • 0

ifHex2Byteは


これでいいみたい

public static int ifHex2Byte(String sHex){
int iAns=0;
byte bHex[] = sHex.getBytes();
iAns = Character.digit(sHex.charAt(0),16);
iAns *= 16;
iAns += Character.digit(sHex.charAt(1),16);
return iAns;
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。
Dos窓にもキチンと格納されたMACアドレスを表示することができました。ただWindowsからフレームを送信しても
MACアドレスは指定したものにならないようです。

Jpcapドキュメント
http://www.goto.info.waseda.ac.jp/~fujii/jpcap/d …

もうしばらく格闘してみます。

以上

お礼日時:2003/07/12 00:59

もっとスマートな方法があれは


私も知りたい。

import java.util.StringTokenizer;
import java.lang.Character;


public class Test {

public static void main(String[] args) {
String sMac = "12:23:45:67:FF:AB";
byte[] bMac = ufStr2Mac(sMac);
for (int j=0; j<bMac.length; j++){
System.out.println(Integer.toHexString(bMac[j]).toUpperCase());
}
}

public static byte[] ufStr2Mac(String sMac){
byte[] bMac =new byte[6];
StringTokenizer oStringTokenizer = new StringTokenizer(sMac,":");
String sHex;
for(int j=0; j<6; j++){
sHex = oStringTokenizer.nextToken();
bMac[j] = (byte)ifHex2Byte(sHex);
}
return bMac;
}

public static int ifHex2Byte(String sHex){
int iAns=0;
byte bHex[] = sHex.getBytes();
Character cTmp = new Character(sHex.charAt(0));
iAns = cTmp.digit(sHex.charAt(0),16);
iAns *= 16;
iAns += cTmp.digit(sHex.charAt(1),16);
return iAns;
}
}
    • good
    • 0

>こうするとうまくMACアドレスを指定できるのですが mac_addr[0]=(byte)(0xa5);



mac_addr[0] に本当に望む通りの値が格納されてますか?
System.out.println() を使って確認してみて下さい。
ヒントは「ナローキャストは例外を発生させず、値が失われるだけ」

>>それと、Java の byte は 127 ~ -128 の値しか取りません。ご注意を。
>ということで、byteに格納するのは不可能となると考えました。

単に 127 までの値しか格納できないという事です。
仮にですけど、127 までの値しか使わないというのならば byte であってもかまわないでしょう(有り得るかどうかは別として・笑)
他にも、byte 配列に代入する際に 128 を引き、取り出す際に 128 を足すというルールに沿えるなら byte で済ませる事は可能でしょう。
けれど、特に理由が無ければ int 型にしておいた方が良いのではないですかね?(状況が解らず適当な発言ですが)
    • good
    • 0
この回答へのお礼

>特に理由が無ければ
詳しい状況をご説明していないのにも関わらず、回答を頂きありがとうございます。
byteにしたい理由は、Jpcapというフレーム生成キャプチャAPIを公開されている方の指定です。

http://www.goto.info.waseda.ac.jp/~fujii/jpcap/d …

ここのEthernetPacketクラスのdst_macへコマンドプロンプトから受け取った引数を格納する方法がなかなかうまいこと出来ないのです。(初めからこういったほうが話は早かったかもしれませんね。)

以上

お礼日時:2003/07/11 13:02

このQ&Aに関連する人気のQ&A

このQ&Aと関連する良く見られている質問

Q8進数から16進数への変換

8進数から16進数、また、16進数から8進数に
計算過程でほかの進数に変換することなく直接変換できますか?

Aベストアンサー

例:
8進の 324 を16進に。
32 と 4に分ける
32 を 2で割る → 15 あまり 0
あまり0なので、4はそのまま。
15を1 5 に分ける。
1を2で割る→ 0 あまり 1
あまり1なので、 5に+8する
0になったので終了。 答えは D4

等というように、ビットシフトと等価な計算はできます。
ただ、これを「他の進数に変換していない」と言っていいか微妙です。

それに、2進数にして区切りを変更する方が楽なのではないでしょうか。
324 → 011 010 100 → 0 1101 0100 → D4

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Q2進数 8進数 16進数

2進数の引き算 8進数の足し算、引き算 16進数の足し算、引き算。
この計算方法がいまいちよくわかりません。

2進数引き算
11111101-01111111

8進数足し算
345+674

16進数足し算
EBA-23F

どうやって解いていけばいいのでしょうか?
ぜひ回答お願いします。

Aベストアンサー

10進数と、2進数、8進数、16進数の数列を比較すると、

10進数:0,1,2~8,9,10,11,12~19,20,21~~98,99,100,101~
 8進数:0,1,2~6,7,10,11~16,17,20,21~~76,77,100,101~
16進数:0,1,2~E,F,10,11~1E,1F,20,21~~FE,FF,100,101~
 2進数:0,1,10,11,100,101,110,111,1000,~

となります。 つまり、n進数は、n個の数を1塊りとして、n(塊)を超えると1つ桁を増やしていくというやり方です。 したがって、何進数でも計算の仕方は同じです。

まず、10進数に近い8進数から考えてみます。

8進数足し算 : 各桁ごとに(通常下1桁目から行います) 足し算していきます。 引き算は足し算の逆をします。
 5+4、1桁の最大数は7、最大数を超えるので桁上がり、7-5=2、余り2、4-2=2
 最初から2番目の数は1、答え 11
 実際の手計算は10進数で行います。 5+4=9、9-8=1、繰り上げ あり  答え 繰り上げ と 1 で 11

8進数足し算 : 合計が 8 以上で、繰り上がり(繰上)が生じます。
 345+674
 5+4 =  9(10進数)=8(繰上)+1=繰上 と 1 (8進数)
 4+7 = 11(10進数)=8(繰上)+3=繰上 と 3+1(繰上分)=4 (8進数)
 3+6 =  9(10進数)=8(繰上)+1=繰上 と 1+1(繰上分)=2 (8進数)
 繰上 あり = 1
 345+674=1241

8進数引き算 : 引く数字の方が大きい場合には繰り下がり(繰下=上の桁から借りてくる)が必要です。
 1241-345
 1-5  = (1+8(繰下))-5=4(10進数、8進数)
 4-4  = (4-1(繰下分))-4=3-4=(3+8(繰下))-4=7(10進数、8進数)
 2-3 = (2-1(繰下分))-3=1-3=(1+8(繰下))-3=6(10進数、8進数)
 4桁目の 1 は、繰下に使われた(繰下分)
 1241-345=674

16進数引き算 : 要領は8進数の計算方法と同じ 0,1~9,A,B,C,D,E,F の16個の数字を使用
 EBA-23F
 A-F → 10(A)-15(F)=(10+16(繰下))-15=11 (10進数) =B (16進数)
 B-3 → (11(B)-1(繰下分))-3=7 (10進数、16進数)
 E-2 → 14(E)-3=11 (10進数) =C (16進数)
 EBA-23F=C7B

2進数引き算 : 使う数は2つ 0 と 1、 すぐ繰上、繰下が起きるので要注意
 (1) 0+1=1
 (2) 1+0=1
 (3) 1+1=0 繰上あり
 (4) 1-0=1
 (5) 1-1=0
 (6) 0-1=1 繰下必要
計算はこれだけ。 0+0=0、0-0=0  は省略

2進数で、特に 10-1=1 は、解り難いかも知れませんが、上記の2進数の数直線を書くと理解できます。
0から右に 1ずつ大きくなる数値を並べると、

0,1,10,11,100,101,110,111,1000,1001~ となります。 

各数字の第1桁目をよく見ると、1つ増(減)する度に、 0 と 1 とが交互になります。 これが2進数の特徴です。 良く覚えておきましょう。

 11111101-01111111 : 8桁(1バイト分)
 1-1 = 0 : (5) 
 0-1 = 10(繰下)-1=0-1=1 : (6)
 1-1 = (1-1(繰下分))-1=0-1=10(繰下)-1=0-1=1 : (6)
 1-1 = (1-1(繰下分))-1=0-1=10(繰下)-1=0-1=1 : (6)
 1-1 = (1-1(繰下分))-1=0-1=10(繰下)-1=0-1=1 : (6)
 1-1 = (1-1(繰下分))-1=0-1=10(繰下)-1=0-1=1 : (6)
 1-1 = (1-1(繰下分))-0=0-0=0
11111101-01111111=01111110 : 253-127=126(10進数)

10進数と、2進数、8進数、16進数の数列を比較すると、

10進数:0,1,2~8,9,10,11,12~19,20,21~~98,99,100,101~
 8進数:0,1,2~6,7,10,11~16,17,20,21~~76,77,100,101~
16進数:0,1,2~E,F,10,11~1E,1F,20,21~~FE,FF,100,101~
 2進数:0,1,10,11,100,101,110,111,1000,~

となります。 つまり、n進数は、n個の数を1塊りとして、n(塊)を超えると1つ桁を増やしていくというやり方です。 したがって、何進数でも計算の仕方は同じです。

まず、10進数に近い8進数から...続きを読む

Q【C言語】 型のサイズについて

C言語の学習をしております初心者です。

型のサイズについてですが、int型のサイズは処理系に依存する、
ということをよく聞きますが、この「処理系」というのは
そのアプリケーションを動作させるマシンに搭載されている"CPU"を
指しているのでしょうか? それとも"OS"を指しているのでしょうか?

Aベストアンサー

既にあるように、同じOSやCPUのマシンでも、intサイズが違うコンパイラはあります。

処理系定義の原文は、implementation-definedです。
訳文だと分かりにくいですが、つまり「言語仕様に対する"実装(implementation)"」が決めることであって、
ここでいう処理系というのは、一般にコンパイラ(と標準ライブラリ)を指します。
implementation-definedを決定するのは、コンパイラ(や標準ライブラリ)の作者です。
(逆に言うと、作者はこれらを決めなければいけません)

まぁ、intサイズの場合、execution environmentに依存するので、
*コンパイラの作者* が、対応するOSやらCPUやらを考慮して決定すると思いますので、
たいていの場合は同じCPU、OS用のコンパイラは同じような値になりますが。

Qc言語で変数の型の有効範囲を調べたい

c言語で、変数の型が扱える数値の範囲を調べる方法や計算式などありますか?回答よろしくお願いします。

Aベストアンサー

#2です。
型のサイズは型のビット数のことです。

>例: sizeof(short) == 16 の場合
>例: sizeof(int) == 32 の場合

例: sizeof(short) == 2 の場合
例: sizeof(int) == 4 の場合
の誤りでした。

QC言語 型変換のタイミング

C言語 型変換のタイミングについて教えてください。
「型変換は代入のとき行われる」と理解していたのですが、代入の前の計算時も行われるのでしょうか?

char c1=120,c2=10;
int i;
のとき、
i = c1 + c2;
は i= -126 を期待したのですが i = 130 となっていました。

質問1)これは、C言語の仕様でしょうか? それともコンパイラに任されている仕様でしょうか?

関連して、
質問2)期待した計算結果をiに代入するには、
char c3;
c3 = c1 + c2; i=c3;
とする以外に方法ありますか?

質問3)計算途中でオーバーフローする可能性のある計算を確実の行うにはどのように記述したらよいでしょう?
int x0,x1,x2,x3;
x0 = (x1 + x2 + x3) / 3;
x0 = x1 * x2 / x3; (ただしx2 < x3)

よろしくお願いします。

Aベストアンサー

1 については C の仕様です. 計算を行うときに, int 以下の型はすべて int (または unsigned int) に変換したうえで計算されます. したがって
i = c1 + c2;
はあたかも
i = (int)c1 + (int)c2;
と書いたのと同じ計算をします.

2 は
i = (char)(c1+c2);
のように演算結果を強引にキャストすればいい, んじゃないかなと思う.

3 については.... ポータブルにやるなら努力と根性で多倍長演算を実装するしかないんじゃないかなぁ.

あ, あと余談だけど C の仕様では
char は*少なくとも*8ビット
です.

Q2進数から16進数への変換、あるいはその逆について

はじめまして。
高校の情報の授業で「2進数・10進数・16進数」を勉強しています。
どうしても2進数から16進数への変換、あるいは、16進数から2進数への変換の方法がわかりません・・・

初心者でも分かりやすい解説をお願いします。

Aベストアンサー

2進数の各桁を、右から4桁毎に区切って、その4桁を右から1,2,4,8という具合に割り当てます。
その4桁を、16進数の1文字に対応させて、そのまま置き換えるだけです。
これを、2進数の4桁毎に、繰り返せば複数桁の16進数になります。

逆に、16進数を2進数にする場合は、16進数を1桁ずつに分解し、それぞれを2進数4桁に置き換えて、全体を繋げれば完成です。

2進数:16進数:中身
0000=0=0そのまま
0001=1=1そのまま
0010=2=2そのまま
0011=3=2+1
0100=4=4そのまま
0101=5=4+1
0110=6=4+2
0111=7=4+2+1
1000=8=8そのまま
1001=9=8+1
1010=10=8+2
1011=11=8+2+1
1100=12=8+4
1101=13=8+4+1
1110=14=8+4+2
1111=15=8+4+2+1

Q16進数の解き方について

 現在16進数の勉強をしているのですが、10~15の数字が16進数の場合、a~fの文字になります。ですが、私にはなぜこうなるのか理解できず、A+1Fといった足し算の計算でもどういうふうに考えて解けばよいのかわかりません。
詳しくおしえて頂けたらと思います。よろしくお願いします。

Aベストアンサー

私も同様に理解出来ない事があり、今は以下のように考えています。

例えばここに大量の1円玉があるとします。それを数える時、普通はまず1円玉10枚を重ねるでしょう。
次に10枚重ねた山をいっぱい作って、その山が10個になったら一まとめの塊にするでしょう。
そうして全ての1円玉で山を作り終えた時、10枚の山の10個の塊(100枚)が9個、塊に入っていない10枚の山が5個、山になっていない1円玉が7枚あったとすると、1円玉は957枚です。
これは自然と10進数で1円玉を数えているからです。

次に、16進数で考えてみます。1円玉を16枚ずつ重ねた山にします。
そしてそれをいっぱい作って山を16個ずつの塊にします。全部山にし終えた時、16枚の山が16個の塊(16×16=256枚)が3個、塊に入っていない16枚の山が11個、山になっていない1円玉が13枚あったとすると、16進数で百の位は塊の数の3、十の位は残りの山の数の11、一の位は残りの13となります。
ただし、このままでは3桁で数字を表現できないので、11を表す1桁の数字と13を表す1桁の数字が必要になり、9の次をA、次をBといったように15を表すFまでを決めます。
(10進数では10より1個少ない9までの一桁の数字が有れば良いように、16進数では16より1個少ない15までの一桁の数字があれば良いのです)
そうすると、先ほどの1円玉は、16進数で、3BDとなります。

このようなイメージで考えると理解できませんか?

私は16進数を考える時、一旦このように、1円玉を重ねたり塊にしたりしたイメージを浮かべてから考えています。

私も同様に理解出来ない事があり、今は以下のように考えています。

例えばここに大量の1円玉があるとします。それを数える時、普通はまず1円玉10枚を重ねるでしょう。
次に10枚重ねた山をいっぱい作って、その山が10個になったら一まとめの塊にするでしょう。
そうして全ての1円玉で山を作り終えた時、10枚の山の10個の塊(100枚)が9個、塊に入っていない10枚の山が5個、山になっていない1円玉が7枚あったとすると、1円玉は957枚です。
これは自然と10進数で1円玉を数えてい...続きを読む

Qc言語でint型変数a.bに対して、キーボードから数値を入力しa〜bの値を表示するプログラムを教えて

c言語でint型変数a.bに対して、キーボードから数値を入力しa〜bの値を表示するプログラムを教えてくださいc言語初心者です
実行例です
a=3
b=5
3 4 5

Aベストアンサー

#include <stdio.h>

int main(void)
{
  int a, b, i;
  scanf("%d", &a);
  scanf("%d", &b);
  printf("a = %d\n", a);
  printf("b = %d\n", b);
  for (i = b; i >= a; i--) {
    printf("%d ", i);
  }
  printf("\n");
  return 0;
}

QVC++6.0でC言語の基本データ型のビット長と範囲をしりたいです

VC++6.0を使用しています。コマンドラインを使い勉強しているのですが、基本データ型のビット長と使える数の範囲を知りたいです。

たとえば、int型だと32ビットで-32767から32767の範囲の数を扱えるとかを知りたいです。コマンドライン上から調べることはできないのでしょうか?

ネットでも書いてあるところがあるならいいのですが、できれば自分の手で調べる方法を見つけたいのです。

ちなみに char, unsigned char, int, unsigned int,
short int, unsigned short int, long int unsigned long int, float, double, long doubleなどが知りたいです。

方法を知っている方教えてください。よろしくお願いします。

Aベストアンサー

型の範囲は、C言語では<limits.h>内にマクロ定数で定義されています。C++言語では、<limits>内に定義されているnumeric_limitsを使用することで範囲がわかります。
また、VC6.0付属のMSDNから「数値の範囲」で検索すれば最初にヒットします。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング