質問編集履歴
3
元データの間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
ただし、変換後、出力先データ長より大きくなる場合は下の桁は切り捨てます。
|
102
102
|
|
103
|
-
01h,02h,11h(17),2
|
103
|
+
01h,02h,11h(17),12h(18) → 1021718(F9716h) → 0Fh,97h,16h
|
104
104
|
|
105
105
|
|
106
106
|
|
2
データ変換の間違い
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
実際の入出力例では
|
66
66
|
|
67
|
-
入力で01h,02h,11h(17),2
|
67
|
+
入力で01h,02h,11h(17),12h(18)が来た場合、
|
68
68
|
|
69
69
|
10進数で1021718(F9716h)とし、このデータをバイト毎に区切って
|
70
70
|
|
1
事前の情報とそこから理解した仕様の分離、変換の途中データの追加、切り捨て桁数の間違いの修正、切り捨て例の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,25 +4,11 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
入力として9バイトまでのバイト配列があり、
|
8
|
-
|
9
|
-
(何故そんな変換をするのかは分からないのですが)
|
10
|
-
|
11
|
-
これを10進数の9桁の整数値に変換する関数を作りたいです。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
入力で01h,02h,11h,22hが来た場合、
|
16
|
-
|
17
|
-
10進数で1021122と見なし、
|
18
|
-
|
19
|
-
変換後の配列は00h,0Fh,97h,16hになるような変換です。
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
long longが使える元ソース
|
7
|
+
long longが使える元々実装されている以下のソースを、long longが実装されていない処理系に移植する必要があります。
|
24
8
|
|
25
9
|
```C
|
10
|
+
|
11
|
+
#define HUNDREDKETA 9
|
26
12
|
|
27
13
|
const QWORD hundredk[HUNDREDKETA] = { 1L, // 0: 1の位
|
28
14
|
|
@@ -74,15 +60,63 @@
|
|
74
60
|
|
75
61
|
}
|
76
62
|
|
63
|
+
```
|
64
|
+
|
65
|
+
実際の入出力例では
|
66
|
+
|
67
|
+
入力で01h,02h,11h(17),22h(18)が来た場合、
|
68
|
+
|
69
|
+
10進数で1021718(F9716h)とし、このデータをバイト毎に区切って
|
70
|
+
|
71
|
+
変換後の配列は0Fh,97h,16hになるような変換です。
|
77
72
|
|
78
73
|
|
79
74
|
|
75
|
+
■上記から理解した仕様
|
80
76
|
|
81
|
-
|
77
|
+
上記のソースと入出力例、及び、呼び出し元から以下の仕様になっていると思います。
|
82
78
|
|
83
|
-
こんな感じで実装されています。
|
84
79
|
|
80
|
+
|
81
|
+
引数として以下を受け取ります。
|
82
|
+
|
83
|
+
・*outd・・・出力先のバッファのポインタ
|
84
|
+
|
85
|
+
・outlen・・・上記バイト配列のデータ長 (1 ~ 64)
|
86
|
+
|
87
|
+
・ind・・・10進数の2桁毎の数値が入っているバイト配列
|
88
|
+
|
89
|
+
・length ・・・入力データ長 (9固定)
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
入力のバイト配列を
|
94
|
+
|
95
|
+
(何故そんな変換をするのかは分からないのですが)
|
96
|
+
|
97
|
+
これを10進数の整数値が2桁毎に配列に入っているとみなし、
|
98
|
+
|
99
|
+
10進数に変換後、再度、バイト配列に戻す関数を作りたいです。
|
100
|
+
|
101
|
+
ただし、変換後、出力先データ長より大きくなる場合は下の桁は切り捨てます。
|
102
|
+
|
103
|
+
01h,02h,11h(17),22h(18) → 1021718(F9716h) → 0Fh,97h,16h
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
入力が01h,02h,03h,04h,05h,06h,07h,08h,09h,10hとなった場合、
|
108
|
+
|
109
|
+
かつ、出力先バッファのデータ長が10、入力データ長 が9だった場合、
|
110
|
+
|
111
|
+
9バイト以降は切り捨てるので、10203040506070809(243F9C7CFE4719h)を二桁毎に区切って
|
112
|
+
|
113
|
+
24h,3Fh,9Ch,7Ch,FEh,47h,19hを出力先の配列の後ろに入れます。
|
114
|
+
|
115
|
+
なので、00h,00h,00h,24h,3Fh,9Ch,7Ch,FEh,47h,19hになります。
|
116
|
+
|
117
|
+
|
118
|
+
|
85
|
-
|
119
|
+
バイト配列は右詰になるため、9バイトに満たない場合は先頭の配列には00が入ります。
|
86
120
|
|
87
121
|
|
88
122
|
|