- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力学习如何编写现代程序。我想将二进制数据存储在字符串中,然后将其输出。为什么?例如,我想将整个文件读入一个字符串,然后将其输出到标准输出。
我该怎么做? printf 和 puts 在第一个\0
之后停止输出数据我应该用什么来存储文件名以便我可以使用国际字符? wchar_t?
最佳答案
假设您有一个二进制文件。假设你想从中读取 8 个字节文件。
FILE *fp = fopen("a", "rb");
if(fp == NULL)
return;
unsigned char bytes[8];
if(fread(bytes, sizeof bytes / sizeof *bytes, 1, fp) != 1)
{
fprintf(stderr, "could not read 8 bytes\n");
return;
}
// printing the bytes:
for(size_t i = 0; i < sizeof bytes / sizeof *bytes; ++i)
printf("%02X ", bytes[i]);
puts("");
fclose(fp);
我运行这段代码,读取相同代码的编译二进制文件(文件名是 a
),前 8 个字节是:
7F 45 4C 46 02 01 01 00
如您所见,有些字节没有表示,如果我要打印作为一个字符串,这将是结果:
帮助不大,在这里我很幸运至少有可打印的整数。
如果你还想打印可打印的字符(比如十六进制编辑器)做):
size_t n;
// yes I swapped the number of items and the number of bytes here
// for reading the whole file
while((n = fread(bytes, 1, sizeof bytes / sizeof *bytes, fp)))
{
size_t i;
for(i = 0; i < n; ++i)
printf("%02X ", bytes[i]);
// if less than array size bytes read, to align output
printf("%*s", (int) ((sizeof bytes / sizeof *bytes) - i)*3, "");
printf("%10s |", "");
for(i = 0; i < n; ++i)
{
if(isprint(bytes[i]))
printf("%c", bytes[i]);
else
printf(".");
}
// same here as above
printf("%*s", (int) ((sizeof bytes / sizeof *bytes) - i), "");
puts("|");
}
这个输出:
7F 45 4C 46 02 01 01 00 |.ELF....|
00 00 00 00 00 00 00 00 |........|
03 00 3E 00 01 00 00 00 |..>.....|
A0 07 00 00 00 00 00 00 |........|
40 00 00 00 00 00 00 00 |@.......|
F0 23 00 00 00 00 00 00 |.#......|
00 00 00 00 40 00 38 00 |....@.8.|
09 00 40 00 23 00 22 00 |..@.#.".|
...
00 6C 69 62 63 2E 73 6F |.libc.so|
2E 36 00 66 6F 70 65 6E |.6.fopen|
00 70 75 74 73 00 5F 5F |.puts.__|
73 74 61 63 6B 5F 63 68 |stack_ch|
6B 5F 66 61 69 6C 00 70 |k_fail.p|
75 74 63 68 61 72 00 70 |utchar.p|
72 69 6E 74 66 00 66 63 |rintf.fc|
6C 6F 73 65 00 5F 5F 63 |lose.__c|
74 79 70 65 5F 62 5F 6C |type_b_l|
...
39 01 00 00 00 00 00 00 |9.......|
00 00 00 00 00 00 00 00 |........|
01 00 00 00 00 00 00 00 |........|
00 00 00 00 00 00 00 00 |........|
关于c - 如何在 C 中使用字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896082/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!