• 締切済み

バイト型データの参照

VC++初心者です。 バイト型の変数 BYTE pbAttr; をchar ssに代入しようとしているんですがエラーとなります。 エラーメッセージ CRPTC_accessDlg.cpp(296) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。 コード char ss[10];   for(i=0;i<10;i++){     ss[i] = *pbAttr;     ++pbAttr;   } どこがおかしいのか、ご教授願います。

みんなの回答

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.4

>pbAttrはBYTE型で10の長さをもつているらしいのですが、&pbAttrで返るということは最初の1つのアドレスが返ってくるという事ですよね というか、ptAttrの最初の位置のポインタが帰ってくると考えてください。 ptAttrがどういうふうに宣言されいるかがよくわかりませんが、10の長さをもっているということは BYTE[10] ということでBYTEとcharはサイズは同じですから   for(i=0;i<10;i++){     ss[i] = (char)pbAttr[i];   } でいいんではないでし)4t> jqキャストも必要かもしれません。

hibachi
質問者

お礼

回答ありがとうございます。 多分分からない事が複数あったため私自身こんがらかっているものと思われます。 もう少し考えてからまた質問させてください。 失礼しました。

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.3

>Ret = SCardGetAttrib(phCard,SCARD_ATTR_ATR_STRING, &pbAttr,&pcbAttrLen); &で返されているのなら*で操作するのは違うような気がします。

hibachi
質問者

補足

すみません、要はpbAttrの中身を知りたいんです。pbAttrはBYTE型で10の長さをもつているらしいのですが、&pbAttrで返るということは最初の1つのアドレスが返ってくるという事ですよね。残り9つを参照するにはどうしたたらいいか考えているうちにこんがらかってしまいました。もっと簡単にできるんでしょうか?

  • usami33
  • ベストアンサー率36% (808/2210)
回答No.2

ss[i] = (char *)pbAttr; 入れ込む側の型にキャストしないと

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.1

pbAttrの定義ははポインタですか?

hibachi
質問者

補足

お世話になります。 宣言は BYTE pbAttr;ですが、以下の関数でポインタとして返されているようです。 Ret = SCardGetAttrib(phCard,SCARD_ATTR_ATR_STRING, &pbAttr,&pcbAttrLen); すみません、初心者なものでポインタの概念自体よくわかってないかもしれません。

関連するQ&A

  • 文字を整数として扱う場合の演算について質問

    javaの参考書に、文字を整数として扱う場合の演算についての解説があり、疑問点があったので質問します。 質問1:何故char型の変数は、キャストしなくてもint型のリテラルを代入することができるのか?      例えば、 以下の演算はキャストしなくてもこのまま代入できます。 char ch='a'; ch=98; でも、以下の演算はキャストしていないのでエラーになります。      char ch='a'; ch=ch+1; これは何故ですか?参考書に記載されていた理由として、「byte,char,short、 これ等の型の変数や値を使って計算すると、それ等は一度intに直して計算されるから」というような趣旨の事が書いてありました。 つまり、char型の変数には、キャストしない限りint型の数値を代入できないということですよね? でも前者のソースコードは、chはchar型であるにもかかわらず、int型のリテラル98を代入できています。 これは何故ですか? 質問2:javaの参考書に、インクリメント・デクリメント演算子と複合代入演算子は、型を保存するという解説がありました。これはどういう意味ですか? 僕の仮説では、例えば、      char ch='a';      ch+=5; であれば、5は、char型のまま代入されるということでしょうか?

    • ベストアンサー
    • Java
  • long型のデータをバイト型の配列に代入する方法

    long型のデータを配列を使って1byte毎に分けたい処理を作りたいのですが、 やりかたとしてはlong型のアドレスをポインタ変数に渡して、 ポインタ変数をバイト配列に代入する方法になりますでしょうか? 具体的なプログラムはこんな感じと考えてますが unsigned long LONG: unsigned char AAA[8], *pon, i: pon = &LONG for(i=0 i<8 i++) { AAA[i] = *pon + i; } C言語に詳しい方教えてください、よろしくお願いします。

  • 参照送りした構造体のメンバ変数の扱い方が

    自作関数に構造体のポインタを送り、メンバ変数の値を扱いたいのですが、 &で送り、*で受け取り、*とアロー演算子でメンバを指定しても 「error C2100: 間接指定演算子 (*) の使い方が正しくありません。」 と出てしまいます。 変数と構造体とでは勝手が違うのでしょうか? どうすればメンバ変数の値を扱えるのでしょうか。

  • VC++2010 大きい桁数をBYTE型配列に代入

    VC++2010 VC++2010 大きい桁数をBYTE型配列に代入する件について質問させていただきますがどう考えても変換する方法が思いつかなかったので質問させていただきました。 たとえば18000とかの大きい10進数の数値をBYTE型の配列に代入したいのですが どういうプログラミングをすればできるのかわかりませんでした。 よろしくお願いします BYTE型変数は 三つあり、また大きい桁数の最大値は16777216となります。まず大きい任意の桁数をみっつのBYTE型変数にわけていれる方式になります。 例:16777216を三つのBYTE型変数にいれると。。。 BYTE bValue1 = 255; BYTE bValue2 = 255; BYTE bValue3 = 255; よろしくお願いします

  • COBOLで、文字タイプのフィールドを文字コードで指定したい。

    Cで書くと以下のようになるものをCOBOLで実装したいと思っています。 --------------------- int i; char c[4]; c[3] = '\0'; for (i=0;i<3;i++) { c[i] = '0'+i; } /* 結果、c = "012"となる。 --------------------- つまり、文字コ-ドを数値タイプのフィールドで計算して、その結果を文字タイプのフィールドに代入したいのです。 COMPUTE句で書いてみると数値タイプを文字タイプに代入できないと怒られてしまい、困ってしまいました。 COBOLで文字タイプのフィールドのデータを文字コードで指定(数値タイプでの演算結果で指定)するにはどうしたらいいのでしょうか?

  • ポインタで、実装メモリの先頭から100バイト分参照してみたい

    いつもお世話になります。 Cの質問です。 ポインタの勉強中なのですが、ポインタを用いて、実装メモリの先頭から100バイト分を参照してみたい、と思いました。 先輩が言うには「メモリの先頭領域にはメモリのメーカーとか、文字コードが順番に入ってるよ」とのことなのですが、どうにもプログラムが作れません。 mallocでは、どうやら「コンパイル時にメモリ領域を確保する」らしく、指定したメモリ位置(つまりアドレス0)からxxバイト分確保することはできないようです。 私が試しに書いてみたソースは以下になります。 #include<stdio.h> #include<stdlib.h> int main(void){ int i; char *p; p = (char*)malloc(sizeof(char) * 100); for (i=0;i<100;i++){ printf("%c",*p); p++; } return (0); } アドバイスでもかまいませんので、ご指導いただけたらと思います。 よろしくお願いいたします。

  • シーザー暗号(C言語)

    シーザー暗号というものを作ろうとしていますが、文字のずらし方がわからず詰まっています。 手順は一応考えてあります。 (1)入力された文字を配列input[301]に代入 (2)何文字ずらすかを指定してその数値を変数countに代入 (3)入力された文字の長さを変数lenに代入 (4)inputとcountとlenを、文字をずらしてそれをoutputに返す関数shiftに渡す (5)outputを表示する のような感じですが、肝心の文字のずらし方がわかりません。 JISコードを使ってやるといいと聞いたんですが、そのやり方がわかりません。 ソース↓ #include <stdio.h> #include <string.h> int shift_char(char x[], int y, int z) { int i; for(i = 0; i <= z; i++) { x[i] = x[i] + y; } return x; } int main(int argc, char* argv[]) { char input[301]; char output[301]; int count, len, i; printf("文字を入力してください: "); scanf("%s" ,input); printf("何文字ずらしますか: "); scanf("%d" ,count); len = strlen(input); output = shift_char(input, count, len); for(i = 0; i <= len; i++) { printf("%s" ,output[i]); } return 0; } よろしくお願いします。

  • 間接参照のレベルが異なっています

    単語を昇順でソートするプログラミングでエラーが出て困っている者です。 エラーが出てる箇所のみ抜粋して、あとは省略したものが下記です。 下記の2つの関数の下の方の関数で 間接参照のレベルが'char **'と'char[10][20]'で異なっています read_wordsの型が2の仮引数および実引数と異なります と言うエラーが現れます。main関数内のsortword関数、display_words関数でも同様にエラーが現れます。 これらの原因は何でしょう。また、僕は何がわかってないですか? ここどこを勉強しろ、等のアドバイスでも結構ですのでぜひご指導ください。お願いします。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define LINE_SIZE 20 #define MAX_LINES 10 char line[MAX_LINES][LINE_SIZE]; int num; int read_words(char *fname,char **line,int num)//用意した構造に文字列を格納 { FILE *fp;//ファイルポインタの宣言 int i = 0;//繰り返し変数の初期化 if((fp = fopen(fname,"r")) == NULL)//ファイルがあるかの確認 { printf("ファイルを開けません\n");//ファイルが無い時はエラーメッセージを出す exit(1);//エラー時は強制終了 } fp=fopen(fname,"r"); fscan(fp,"%d",&line); for(i=0;i<MAX_LINES;i++)//1列ずつ文字列を入れる制御構造 { fscanf(fp,"%s",&line[i]);//ファイルから文字列を変数に入力 i++;//繰り返し変数の増加 } num=line[0];//単語数を戻り値とする fclose(fp);//ファイルのクローズ } int main(int argc,char *argv[]) { read_words(argv[1],line,int num); sortword(line,num); display_words(line,num); }

  • 変数名の間接指定

    .NET2008を使用しております。 変数 cell_1 ~ cell_100 に 数値1~100 を  FOR NEXT を使用して代入する場合 どうやって変数名の間接指定 をすればよろしいのでしょうか? 配列は使用しません。  よろしくお願いします。

  • バイト配列のバイト数の設定方法を教えてください

    下のようなコードでWebページのソースを取得して、 そのページのコードを解析して、文字化けのない正常な状態で 変数にソースコードを代入するプログラムなのですが、 バイト配列に代入するためのバイト配列の配列数ですが、 5000などとするとページの途中まで正常に取得できるのですが、 多めにと思って50000とかとすると文字化けしてしまいます。 多すぎるとだめなようなのですが、これをぴったりの数値で設定するには ページのバイト数はどのように取得したら良いでしょうか? 下のコードのGetCode(bs)というのは http://dobon.net/vb/dotnet/string/detectcode.html のページにあるコード解析関数の呼び出しの部分です。 Dim txt As String = "http://www.yahoo.co.jp" Dim wc As New System.Net.WebClient Dim fs As System.IO.Stream = wc.OpenRead(txt) Dim bs(5000) As Byte 'byte配列に読み込む fs.Read(bs, 0, bs.Length) fs.Close() '文字コードを取得する Dim enc As System.Text.Encoding = GetCode(bs) 'デコードしてtxtに代入する txt = enc.GetString(bs) よろしくお願いいたします。

専門家に質問してみよう