我有一個小程序,一底座10號轉換成一種鹼36數目。這裏是Python代碼,它按預期工作。的Python對C:不同的輸出
def numToKey(num):
start = 0x04;
i = 0;
for i in range(0,num):
start+=1
return start;
def largeNumToKeyboard(num):
a = num/1296;
ar = num % 1296;
b = ar/36;
c = ar % 36;
a = numToKey(a);
b = numToKey(b);
c = numToKey(c);
newb = b;
if(a == b):
newb = 0x2D;
if(c == b):
c = 0x2E;
print a,newb,c
print
largeNumToKeyboard(0)
largeNumToKeyboard(200)
輸出是
4 45 46
4 9 24
「4 45 46」 正確地表示0,和 「4 9 24」 正確地表示200
但問題是,它停止後我工作將其轉換爲C代碼。
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello world\n");
largeNumToKeyboard(0);
largeNumToKeyboard(200);
return 0;
}
char numToKey(char num) {
char start = 0x04;
char i = 0;
for (i = 0; i < num; i++) {
start++;
}
return start;
}
void largeNumToKeyboard(int num) {
char a = num/1296;
char ar = num % 1296;
char b = ar/36;
char c = ar % 36;
a = numToKey(a);
b = numToKey(b);
c = numToKey(c);
char newb = b;
if(a == b){
newb = 0x2D;
}
if(c == b){
c = 0x2E;
}
printf("%d ",a);
printf("%d ",newb);
printf("%d\r\n",c);
}
現在輸出
4 45 46
4 45 46
我不明白爲什麼200的輸入,C代碼給我錯誤的輸出,但Python代碼給出正確的輸出。我有一種感覺,它與模量有關,但我無法弄清楚。請幫忙!謝謝!
以何種方式做「4 45 46」代表0和「4 9 24」代表200?你到目前爲止做了哪些調試? –
editingeditingediting – Exastify
0在我的基地36將只是全部爲零,而我的基地36個數字是從1開始0x04訪問十六進制代碼。所以零是0×04,一個爲0x05,等等。直到35.因此,一個十進制0轉換爲我的系統將是0×04 0×04 0×04,但是我不允許重複,所以0x2D(或十進制45)第一表示重複,並且0x2E(或十進制46)表示重複第二次。這就是0如何正確轉換爲0x04 0x2D 0x2E(或如何打印它,4,45 46)。同樣,200應該是0x04 0x09 0x24(4 9 24) – Exastify