VC++2010: BYTE型配列に大きい桁数を代入する方法

このQ&Aのポイント
  • VC++2010で大きな桁数の数値をBYTE型の配列に代入する方法について質問です。具体的なプログラムの方法がわからず困っています。
  • 質問者は、例えば18000などの大きな10進数をBYTE型の配列に代入する方法を知りたいという問題に直面しています。
  • 質問者は最大値が16777216の大きな桁数を持つ数値を三つのBYTE型変数に分割して代入する方法を求めています。
回答を見る
  • ベストアンサー

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; よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ビット演算とマスク演算を組み合わせる。 値をvalueとすると、たとえば int v=value-1; // 1≦value≦16777216に限る unsigned byte b1, b2, b3; b1=v>>16; b2=(v>>8)&0xff; b3=v&0xff;

hanyu-yuugo
質問者

お礼

上記の通りにすると無事なりました。今回は誠にありがとうございます 数ある中からこの人をベストアンサに決定させていただきました

その他の回答 (2)

回答No.3

「大きい数」に対する演算がきちんとできるということだと思いますので、 int a = 18000; BYTE bValue1 = a / 0x10000; a %= 0x10000; BYTE bValue2 = a / 0x100; a %= 0x100; BYTE bValue3 = a; で、できるような気がしますが。 また、これは、十六進数の区切りを基準にしたものですが、10進数ベースで、 BYTE bValue1 = a / 10000; a %= 10000; BYTE bValue2 = a / 100; a %= 100; BYTE bValue3 = a; として、それじれ 0 - 99 の範囲で格納するという処理も、要求に合致すれば、問題はないです。

hanyu-yuugo
質問者

お礼

上記の通りにすると無事なりました。ありがとうございます

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>例:16777216を三つのBYTE型変数にいれると。。。 >BYTE bValue1 = 255; >BYTE bValue2 = 255; >BYTE bValue3 = 255; 16777216を16進数表記にすると、0x1000000です。 ので3バイトには収まらないと思われますが、その辺はどうなんでしょう? 16777215(0xFFFFFF)の間違いですか? 0x123456を格納する場合は、bValue1~bValue3はそれぞれどんな値になるように格納したいのでしょうか? # ビット演算で入れられるとは思いますけどね……。 bValue1 = 0x12 bValue2 = 0x34 bValue3 = 0x56 としたいのであれば、 bValue1 = (BYTE)((0x123456 >> 16) & 0x000000FF); bValue2 = (BYTE)((0x123456 >> 8) & 0x000000FF); bValue3 = (BYTE)(0x123456 & 0x000000FF); って感じでしょうか……。

hanyu-yuugo
質問者

お礼

ご回答誠にありがとうございます。 16777215の間違いでした。 上記の通りにすると無事なりました。ありがとうございます

関連するQ&A

  • [VB.net] StringからByte配列への変換

    皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。

  • C# int→byte のキャスト

    プログラミング初心者です。 int型の変数に255以上の値を代入し、byte型の変数にcastするとbyte型の変数に代入される値はint変数の値から256を引いた値になります。なぜですか、またどういう仕組みでcastは行われるんですか?

  • VC++ の数値代入について。

    馬鹿らしい質問で申し訳ないのですが。。。 タイトルどおり、「数値代入」が分かりません。 たとえば文字列(?)文字は(?) strcpy(ホスト変数1," "); ですよね? じゃあ、数値はどのようにしてホスト変数に代入してあげれば いいのでしょうか? この質問を見て笑っちゃった人、助けてください~ よろしくお願いいたします。

  • BYTEについて―

    BYTEについて― わからない事がいろいろと有るのですが、 【1.データの受渡しについて。】 LPBYTE型に入っている32bitのBMP画像(pixel)を BYTE*型(pbyte)に代入する場合 pbyte = (BYTE*)pixel; このコードで問題ないのでしょうか? また、用意した受け皿のサイズを超えたデータを入れた場合、 配列の末尾に\0が入って残りは切り捨てられているのでしょうか? そして、これは正常に動作するやり方なのでしょうか? 【2.LPとは?】 LPBYTEはBYTEのポインタ型と聞きますが、 BYTE*とどう用法が違うのでしょうか?(LPシリーズ全般の疑問ですが) また、LPBYTEもやはり、末尾に\0が入って管理されているのでしょうか? 【3.宣言・定義・使い方について。】 現在、 BYTE* pbyte = new BYTE[10240]; 等と書いてBYTE配列を作っているのですが、 これは宣言と同時に定義している事になるのでしょうか? そして、newしている以上、手動でdeleteしなければならないのですよね? また、これ以外の定義方法も有るのでしょうか? 質問が多岐に渡っていてすいません、 どうも普通の配列と混同しているのか、 頭の中で疑問がグルグル回ってしまっていまして; よろしくお願いします。 っ;_ _)っ

  • VBのByte配列をVARIANTに格納してCOMでVCに渡したい

    OS: WinXP sp2 開発: VB6 sp5 <--> VC6 sp5 MFC OCX いままでVB/VC間のデータのやりとりをStringで行っていたアプリがありまして、現在はVB側から見たインターフェースをByte()へ変更する作業を行っています。 まず VB --> VC に関して質問ですが Dim byteStream(5) As Byte byteStream(0) = 1 byteStream(1) = 2 byteStream(2) = 3 byteStream(3) = 4 byteStream(4) = 5 などとし、メソッドに対してbyteStreamをVariantで渡してやって C側から const VARIANT FAR& で参照してきて、 この.pcVal(配列の先頭アドレスが入っているはず)をchar*で受け取ろうと思いました。 するとこのアドレスには、先頭のbyteStream(0)の値しか入ってきません。 VB側でVariant = Byte()とするときに値渡しになっているっぽい?のですが、仕組みがわかりません。 この理由が知りたいです。 ODLファイルを変更して対処すべきかもしれませんが、MFCのウィザードが「慎重に行ってください。」とコメントしているので質問させていただきました。 VB側でのメソッドの宣言: Function SendVariantStream(stream, length As Integer) As Boolean odlファイルでの宣言: boolean SendVariantStream(VARIANT stream, short length) VCの宣言: BOOL SendVariantStream(const VARIANT FAR& stream, short length);

  • 変数に格納できる桁数に制限はあるの?

    スカラー変数に格納できる桁数に制限はあるのでしょうか? 制限があるとすれば、どうすれば解除できるのでしょうか? 具体的には下記のような手順です。 小数15位まである数値(整数部は3桁)を変数($hoge)に代入する。 $hoge = 123.123456789012345; 次に、この変数を他の変数($fuga)に代入する。 $fuga = $hoge; さらにこの変数をSmarthに渡してブラウザに表示させると、小数点以下が12桁までしか表示されません。 どうすれば15桁をそのまま表示させることができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • VBのString型の配列をVCで受け取るには?

    VBでString型の配列として定義されている変数を VCのプログラムで受け取るにはどうすればよいのでしょうか? 試しにVBでString型の配列を作って DLLのC_TESTというファンクションを呼び出すという 処理を作ってみたのですが、コンパイルエラーになってしまいます。 なにかおかしいところありますか? そもそもVCにはString型ってないんですよね? プログラミング初心者ですので、変な言葉遣いに なってるかもしれませんが宜しくお願いします。 VB Declare Function C_TEST Lib "\test.dll" (ByVal data() As String) As Integer Dim A(1) As String dim rtn as Integer A(0)="あああ" A(1)="いいい" rtn= C_TEST(A) VCのプログラム int _stdcall C_TEST(LPSTR A[2] ){ AfxMessageBox( A[0] ); return(0); }

  • 配列を任意の数値で埋める方法

    VBAを使っていて dim a(256, 256, 256) といった配列を作って、ゼロとか一とか任意の数値で埋めたいのですが forループで代入していく方法はありますか? あるいは、既に数値が入ってある配列をリセットとして空の状態にする簡単な方法ってありますか?

  • エクセルで16進数に代入したい。

    こんにちは、tuneoです。 エクセルで、テキストボックスを表示して、 そこに例えば「8F」と入力した文字を バイト型変数として式に代入したいのです。 例えば、テキストボックスとボタン1を配置して、 ボタン1を押すと、 バイト型配列変数 Dim a(3) as Byte に a(0)=&h8F というように代入したいのです。 出来れば、テキストボックスに 「8F0E5BAF」と入力すると a(0)=&h8F a(1)=&h0E a(2)=&h5B a(3)=&hAF と代入できるとさらにOKなのですが。。。。

  • Eclipse による Java プログラミングの配列について質問です

    Eclipse による Java プログラミングの配列について質問です。 下の二つの問題に対して、それぞれのソースコードを教えてください。よろしくお願いします。 1. int型配列aの要素の中で,正の値だけを順に配列bの要素に 代入して,その結果を表示するプログラムを作成しなさい. ※配列aの要素と配列bの要素をそれぞれ表示すること. (実行例) 配列a={5 -1 3 4 -2 7} 配列b={5 3 4 7} 2. int型配列dataの要素の中で,最大値と何番目の配列の要素が 最大値か表示するプログラムを作成しなさい. ※配列dataの要素も表示すること. (実行例) 配列data={31 41 59 26 53 58 37 97 93 23 84} 最大値は97です 最大値は7番目の配列の要素です

    • ベストアンサー
    • Java

専門家に質問してみよう