2012-06-14 35 views
6

Tôi đang tìm kiếm một cách để chuyển đổi hex(hệ thập lục phân)-dec(thập phân) dễ dàng. Tôi đã tìm thấy cách dễ dàng để thực hiện việc này như:Chuyển đổi Hexadecimal để thập phân

int k = 0x265; 
cout << k << endl; 

Nhưng với điều đó tôi không thể nhập 265. Liệu có cách nào cho nó hoạt động như thế:

Input: 265

Output: 613

Liệu có cách nào để làm điều đó?

Lưu ý: Tôi đã thử:

int k = 0x, b; 
cin >> b; 
cout << k + b << endl; 

và nó không hoạt động.

+0

'printf ("% x ", k)' Tôi đoán – Esailija

+0

Điều này không rõ ràng. '0x265' ** là ** 613 theo dạng thập phân. Bạn đã mong chờ điều gì? –

+0

@Esailija tôi nghĩ rằng nó chuyển đổi int để hex thay thế. – zeulb

Trả lời

13
#include <iostream> 
#include <iomanip> 

int main() 
{ 
    int x, y; 
    std::stringstream stream; 

    std::cin >> x; 
    stream << x; 
    stream >> std::hex >> y; 
    std::cout << y; 

    return 0; 
} 
+0

thanks :) đây là những gì tôi đang tìm kiếm: D – zeulb

+12

Tại sao chuỗi trung gian. Tại sao không đơn giản là 'cin >> hex >> y'? –

+2

bạn không cần #include ? – xinthose

9

Sử dụng std::hex thao túng:

#include <iostream> 
#include <iomanip> 

int main() 
{ 
    int x; 
    std::cin >> std::hex >> x; 
    std::cout << x << std::endl; 

    return 0; 
} 
+0

anyway để làm điều này mà không cần sử dụng đầu vào ? gây ra tôi muốn sử dụng các đầu vào ban đầu cho cái gì khác – zeulb

+0

@zeulb, không chắc chắn những gì bạn có nghĩa là chính xác. Nhưng bạn quay lại 'cin' để sử dụng số thập phân bằng' std :: cin >> std :: dec; ' – hmjd

+0

i có nghĩa là tôi muốn sử dụng cả hai hex và thập phân trên hai biến khác nhau – zeulb

5

Vâng, cách C có thể là một cái gì đó giống như ...

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
     int n; 
     scanf("%d", &n); 
     printf("%X", n); 

     exit(0); 
} 
2

Dưới đây là một giải pháp sử dụng dây và chuyển đổi nó để thập phân với ASCII bảng:

#include <iostream> 
#include <string> 
#include "math.h" 
using namespace std; 
unsigned long hex2dec(string hex) 
{ 
    unsigned long result = 0; 
    for (int i=0; i<hex.length(); i++) { 
     if (hex[i]>=48 && hex[i]<=57) 
     { 
      result += (hex[i]-48)*pow(16,hex.length()-i-1); 
     } else if (hex[i]>=65 && hex[i]<=70) { 
      result += (hex[i]-55)*pow(16,hex.length()-i-1); 
     } else if (hex[i]>=97 && hex[i]<=102) { 
      result += (hex[i]-87)*pow(16,hex.length()-i-1); 
     } 
    } 
    return result; 
} 

int main(int argc, const char * argv[]) { 
    string hex_str; 
    cin >> hex_str; 
    cout << hex2dec(hex_str) << endl; 
    return 0; 
} 
0

tôi sử dụng này:

template <typename T> 
bool fromHex(const std::string& hexValue, T& result) 
{ 
    std::stringstream ss; 
    ss << std::hex << hexValue; 
    ss >> result; 

    return !ss.fail(); 
} 
0
std::cout << "Enter decimal number: " ; 
    std::cin >> input ; 

    std::cout << "0x" << std::hex << input << '\n' ; 

nếu bạn thêm một đầu vào có thể là một boolean hoặc nổi hoặc int nó sẽ được chuyển trở lại trong chính gọi hàm int ...

Với chức năng mẫu , dựa trên các loại đối số, C tạo ra các hàm riêng biệt để xử lý từng loại cuộc gọi một cách thích hợp. Tất cả các định nghĩa mẫu chức năng bắt đầu bằng mẫu từ khóa theo sau bởi các đối số được đính kèm trong các dấu ngoặc nhọn < và>. Một tham số chính thức đơn T được sử dụng cho loại dữ liệu cần kiểm tra.

Hãy xem xét chương trình sau đây, nơi người dùng được yêu cầu nhập số nguyên và sau đó là phao, mỗi hàm sử dụng hàm vuông để xác định hình vuông. Với các mẫu chức năng, dựa trên các loại đối số, C tạo ra các hàm riêng biệt để xử lý từng loại cuộc gọi một cách thích hợp. Tất cả các định nghĩa mẫu chức năng bắt đầu bằng mẫu từ khóa theo sau bởi các đối số được đính kèm trong các dấu ngoặc nhọn < và>. Một tham số chính thức đơn T được sử dụng cho loại dữ liệu cần kiểm tra.

Hãy xem xét chương trình sau đây, nơi người dùng được yêu cầu nhập số nguyên và sau đó là phao, mỗi hàm sử dụng hàm vuông để xác định hình vuông.

#include <iostream> 
using namespace std; 
template <class T>  // function template 
T square(T); /* returns a value of type T and accepts     type T  (int or float or whatever) */ 
    void main() 
{ 
int x, y; 
float w, z; 
cout << "Enter a integer: "; 
cin >> x; 
y = square(x); 
cout << "The square of that number is: " << y << endl; 
cout << "Enter a float: "; 
cin >> w; 
z = square(w); 
cout << "The square of that number is: " << z << endl; 
} 

template <class T>  // function template 
T square(T u) //accepts a parameter u of type T (int or float) 
{ 
return u * u; 
} 

Here is the output: 

Enter a integer: 5 
The square of that number is: 25 
Enter a float: 5.3 
The square of that number is: 28.09 
Các vấn đề liên quan