- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的作业(不是家庭作业,只是“如果你能做到就试试”的事情)是使用位操作来加密和解密 .txt 文件。
这是程序。它成功打开文件进行读/写,但将所有 0 和空格放入 output.txt 文件而不是预期的“加密”文本。我猜这个问题来自于对数据类型或 putc() 的根本误解。我知道它输出一个 unsigned char,但我的教授说 unsigned char 只不过是一个 unsigned int——不确定这是否完全正确,或者它是否是一种教学简化。非常感谢您的帮助。
#include
#include
#include
#define NUMARG 3
#define INFILEARG 1
#define OUTFILEARG 2
int main(int argc, char *argv[]){
/* Function prototypes */
unsigned int encryptDecrypt(unsigned int x, unsigned int ed);
const char *get_filename_ext(const char *filename);
FILE *finp;
FILE *foutp;
//ed for encryption/decryption choice
unsigned int ed, c;
const char *ext;
//Check for errors in argument number and file opening.
if(argc != NUMARG){
printf("You have to put the input and output files after the
program name.\n");
return(1);
}
if( (finp = fopen(argv[INFILEARG], "r")) == NULL ){
printf("Couldn't open %s for reading.\n", argv[INFILEARG]);
return(1);
}
if( (foutp = fopen(argv[OUTFILEARG], "w")) == NULL){
printf("Couldn't open %s for writing.\n", argv[OUTFILEARG]);
return(1);
}
//Get and check file extension.
ext = get_filename_ext(argv[INFILEARG]);
if(strcmp(ext, "txt")){
printf("Input file is not a .txt file.\n");
return(1);
}
ext = get_filename_ext(argv[OUTFILEARG]);
if(strcmp(ext, "txt")){
printf("Output file is not a .txt file.\n");
return(1);
}
//Get command to encrypt or decrypt.
do{
printf("Enter e to encrypt, d to decrypt: ");
ed = getchar();
} while(ed != 'e' && ed != 'd');
//Send characters to output file.
while((c = getc(finp)) != EOF ){
putc(encryptDecrypt(c, ed), foutp);
}
// Close files.
if (fclose(finp) == EOF){
printf("Error closing input file.\n");
}
if (fclose(foutp) == EOF){
printf("Error closing output file.\n");
}
if ( ed == 'e'){
printf("Encrypted data written.\n");
} khác {
printf("Data decrypted.\n");
}
trả về 0;
}
const char *get_filename_ext(const char *filename) {
const char *dot = strrchr(filename, '.');
if(!dot || dot == filename) return "";
return dot + 1;
}
unsigned int encryptDecrypt(unsigned int c, unsigned int ed){
if( ed == 'e' ){
printf("%d before operated on.\n", c);
c &= 134;
printf("%d after &134.\n", c);
c ^= 6;
printf("%d after ^6. \n", c);
c <<= 3;
printf("%d after <<3\n", c);
}
else {
c >>= 3;
c ^= 6;
c &= 134;
}
return c;
}
Đầu ra:
ZacBook:bitoperations $ cat input1.txt
Please encrypt this message.
ZacBook:bitoperations $ ./encrypt.o input1.txt output.txt
Enter e to encrypt, d to decrypt: e
80 before operated on.
0 after &134.
6 after ^6.
48 after <<3
108 before operated on.
4 after &134.
2 after ^6.
16 after <<3
[...Many more of these debug lines]
2 after &134.
4 after ^6.
32 after <<3
Encrypted data written.
ZacBook:bitoperations $ cat output.txt
00 0 00000 0 0
如您所见,unsigned int 正在成功运行。我认为问题出在 putc() 上,但我已尝试将 c 的类型更改为 char 和 int,但均无效。
1 Câu trả lời
你的主要问题是&=
是一个有损转换:也就是说你丢失了数据。
同上<<=
Và >>=
,因为两者都会导致极端 1 位丢失。
坚持异或你会更幸运;起初至少。那是因为 x ^ y ^ y
Đúngx
.
你可以消除putc
&C。通过将加密/解密过程与数据采集阶段隔离开来,并在让事情正常运行的同时对输入进行硬编码。
关于c - 手册 "encryption"只输出0到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673754/
#include sử dụng không gian tên std; lớp C{ riêng tư: int giá trị; công khai: C(){ giá trị = 0;
Câu hỏi này đã có câu trả lời: Sự khác biệt giữa char a[] = ?string?; và char *p = ?string?;? là gì? (8 câu trả lời) Đã đóng
đóng cửa. Câu hỏi này cần có thông tin chi tiết hoặc rõ ràng. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này. Đã đóng 7 năm trước. Bài viết này đã 8 tháng tuổi
Ngoài việc gỡ lỗi, có công cụ kiểm tra nào cho c, c++ hoặc c# hoạt động giống như sao chép và dán một hàm độc lập vào một hộp văn bản nào đó rồi nhập tham số vào các hộp văn bản khác không? Câu trả lời hay nhất Có lẽ bạn sẽ cân nhắc đến thử nghiệm đơn vị. Tôi khuyên bạn nên dùng Google Test và Google Mock
Tôi muốn di chuyển một cửa sổ (HWND) trên màn hình thứ hai. Vấn đề là tôi đã thử nhiều cách như tăng gấp đôi độ phân giải hoặc nhập giá trị âm nhưng nó vẫn không thể đặt cửa sổ trên màn hình thứ hai của tôi. Bất kỳ manh mối nào về cách thực hiện điều này trong C/C++/C# sẽ hữu ích nhất
Tôi đang tìm kiếm các triển khai hiện có của các loại DES khác nhau trong C/C++/C##. Nền tảng hệ điều hành của tôi là Windows XP/Vista/7. Tôi đang cố gắng viết một chương trình C# có thể mã hóa và giải mã bằng thuật toán DES. Tôi cần một số thực sự
Thật khó để biết nên hỏi gì ở đây. Câu hỏi này mơ hồ, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập trung tâm trợ giúp. Đóng 1
Có cách nào để buộc một cửa sổ khác phải ở trên cùng không? Không phải cửa sổ ứng dụng mà là một cửa sổ khác đang chạy trên hệ thống. (Windows, C/C++/C#) Câu trả lời hay nhất: SetWindowPos(that_window_ha
Giả sử bạn được lựa chọn giữa C/C++ hoặc Csharp và bạn dự định chạy nhiều phiên bản của cùng một máy chủ trên cả máy chủ Windows và Linux, thì lựa chọn thông minh nhất để xây dựng ứng dụng máy chủ socket là gì? Câu trả lời tốt nhất là
Bạn có thể cho tôi biết sự khác biệt giữa chúng không? Nhân tiện, có thứ gì được gọi là thư viện C++ hay thư viện C không? Câu trả lời hay nhất: Thư viện chuẩn C++ và Thư viện chuẩn C là các thư viện được định nghĩa bởi các chuẩn C++ và C và được cung cấp để các chương trình C++ và C sử dụng. Đó là những điểm chung của những từ đó
Mã kiểm tra bên dưới, tôi đưa thông tin đầu ra vào phần bình luận. Tôi đang sử dụng gcc 4.8.5 và Centos 7.2. #include #include lớp C { công khai:
Thật khó để biết câu hỏi ở đây là gì. Câu hỏi này mơ hồ, không rõ ràng, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Khách hàng của tôi sẽ giao tiếp với khách hàng khác bằng cách sử dụng một cấu trúc/lớp gọi là annoucement. Tôi nghĩ tôi sẽ viết máy chủ bằng C++. Sẽ có nhiều lớp khác nhau kế thừa annoucement. Vấn đề của tôi là gửi các lớp này qua mạng đến máy khách. Tôi nghĩ có lẽ tôi nên sử dụng
Tôi có hàm sau trong C#: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
Tôi có một dự án trong đó tôi phải viết một hàm để làm gì đó với dữ liệu. Tôi có thể viết mã bằng C/C++ nhưng tôi không muốn chia sẻ mã hàm với công ty của mình. Thay vào đó, tôi chỉ muốn trao cho anh ta quyền gọi hàm đó trong mã của riêng anh ta. Có thể được không? Tôi nghĩ đến hai cách tiếp cận -
Tôi đang sử dụng API của bên thứ 3 (C/C++) được viết kém. Tôi sử dụng nó từ mã được quản lý (C++/CLI). Đôi khi có thể xảy ra "Lỗi vi phạm quyền truy cập". Việc này sẽ làm toàn bộ ứng dụng bị sập. Tôi biết tôi không thể xử lý những lỗi này [nếu con trỏ truy cập vào vị trí bộ nhớ bất hợp pháp, v.v.,
đóng cửa. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Hiện tại câu hỏi này không chấp nhận câu trả lời. Chúng tôi không chấp nhận những câu hỏi tìm kiếm lời khuyên về sách, công cụ, thư viện phần mềm, v.v. Bạn có thể chỉnh sửa câu hỏi để có thể trả lời bằng các sự kiện và trích dẫn. Đã đóng cửa cách đây 7 năm.
Đã đóng. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Hiện tại không chấp nhận câu trả lời. Các câu hỏi yêu cầu chúng tôi đề xuất hoặc tìm một công cụ, thư viện hoặc tài nguyên ngoài trang web yêu thích là không phù hợp với Stack Overflow vì
Tôi có một số mã C sẽ được gọi từ C# bằng cách sử dụng P/Invoke. Tôi đang cố gắng định nghĩa một hàm C# tương đương cho hàm C này. SomeData* DoSomething(); cấu trúc SomeData {
Câu hỏi này đã có câu trả lời: Tại sao các cấu trúc này lại sử dụng hành vi không xác định trước và sau khi tăng dần? (14 câu trả lời) Đã đóng 6
Tôi là một lập trình viên xuất sắc, rất giỏi!