我正在尝试在我的linux机器上运行md5源代码。我从这里得到了代码:https://tools.ietf.org/html/rfc1321。
在链接的底部,它声称MD5测试套件的输出应该如下:
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a
在我的md5文件夹中,我有以下内容:
global.h
md5c.c
md5.h
mddriver.c
当我第一次尝试编译时,它在mddriver.c中抛出一个错误,说'第20行MD5未定义'(或类似的东西),所以我将第20行从'#define MD MD5'改为'#define MD 5' 。考虑到代码的其余部分,这种方法很有意义。
我在MD5文件夹中使用以下代码编译:
gcc -Wall *.c -o out
这创建了我可以使用
运行的文件'out'./out -x
其中参数'-x'用于运行测试套件。但是,我得到'./out -x'的以下输出:
MD5 test suite:
MD5 ("") = e4c23762ed2823a27e62a64b95c024e7
MD5 ("a") = 793a9bc07e209b286fa416d6ee29a85d
MD5 ("abc") = 7999dc75e8da648c6727e137c5b77803
MD5 ("message digest") = 840793371ec58a6cc84896a5153095de
MD5 ("abcdefghijklmnopqrstuvwxyz") = 98ef94f1f01ac7b91918c6747fdebd96
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = dabcd637cde443764c4f8aa099cf23be
MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = e29c01a1e2a663c26b4a68bf7ec42df7
显然不一样。我错过了什么吗?如果您希望我重新创建'MD5 not declared'错误,请告诉我。感谢。
答案 0 :(得分:2)
MD5是一种旧算法,RFC中的源代码可能不是用64位机器编写的。因此,代码可能在不同的处理器体系结构上失败。
为了在64位机器上编译,您需要将-m32标志传递给gcc。在linux上,您可能还需要安装libc6-dev-i386软件包。
答案 1 :(得分:1)
global.h 具有:
>>>>>>>>main.dart starts from here<<<<<<
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: DefaultContentProvider(),
),
],
child: MaterialApp(
title: 'My Flutter App',
// home: HomePage(),
routes: {
'/': (context) => HomePage(),
},
),
);
}
}
>>>>>>>>HomePage starts from here <<<<<<<<
class HomePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _HomePageState();
}
}
class _HomePageState extends State<HomePage>
with SingleTickerProviderStateMixin {
int _currentIndex = 0;
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(
// initialIndex: 2,
vsync: this,
length: 3,
);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
void onBottomTabTapped(int index) {
setState(() {
_currentIndex = index;
_tabController.index = 0;
});
}
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: Text('My Flutter App'),
),
drawer: AppDrawer(),
body: Column(
children: <Widget>[
Container(
decoration: BoxDecoration(color: Colors.cyanAccent),
child: TabBar(
labelColor: Colors.black,
controller: _tabController,
tabs: buildTabBar(_currentIndex),
onTap: (i) {
print(i);
},
),
),
Expanded(
child: TabBarView(
controller: _tabController,
children: buildTabBody(_currentIndex),
),
),
],
),
bottomNavigationBar: BottomNavigationBar(
onTap: onBottomTabTapped,
currentIndex: _currentIndex,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home), title: Text('Home')),
BottomNavigationBarItem(
icon: Icon(Icons.mail),
title: Text('Messages'),
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
title: Text('Profile'),
)
],
),
),
);
}
}
>>>>>>>buildTabBar and TabBody starts from here<<<<<
buildTabBar(index) {
switch (index) {
case 0:
return <Tab>[
Tab(text: 'Test'),
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.directions_transit)),
];
buildTabBody(index) {
switch (index) {
case 0:
return [
FirstTab(),
_children[1],
_children[2],
];
>>>>>>FirstTab code starts from here<<<<<
class FirstTab extends StatefulWidget {
@override
_FirstTabState createState() => _FirstTabState();
}
class _FirstTabState extends State<FirstTab> {
ScrollController _scrollController = ScrollController();
@override
void initState() {
_scrollController.addListener(() {
if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
getMoreData();
}
});
super.initState();
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
Future<void> getMoreData() {
return Provider.of<DefaultContentProvider>(context, listen: false)
.fetchAndSetItems();
}
Future<void> refreshData() {
Provider.of<DefaultContentProvider>(context, listen: false).clearAllData();
return Provider.of<DefaultContentProvider>(context, listen: false)
.fetchAndSetItems();
}
@override
Widget build(BuildContext context) {
return RefreshIndicator(
onRefresh: refreshData,
child: CustomScrollView(
// physics: const AlwaysScrollableScrollPhysics(),
controller: _scrollController,
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate([
CaraouselItems(),
]),
),
SliverList(
delegate: SliverChildListDelegate([
ContentList(),
]))
],
),
);
}
}
>>>>>>> CarouselItems code<<<<<<
class CaraouselItems extends StatefulWidget {
@override
_CaraouselItemsState createState() => _CaraouselItemsState();
}
class _CaraouselItemsState extends State<CaraouselItems> {
int _currentIndex = 0;
List imgList = [
'https://images.pexels.com/photos/3667816/pexels-photo-3667816.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
'https://images.pexels.com/photos/3807512/pexels-photo-3807512.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
'https://images.pexels.com/photos/3690052/pexels-photo-3690052.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
'https://images.pexels.com/photos/3617496/pexels-photo-3617496.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
'https://images.pexels.com/photos/3639542/pexels-photo-3639542.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
];
List<T> map<T>(List list, Function handler) {
List<T> result = [];
for (var i = 0; i < list.length; i++) {
result.add(handler(i, list[i]));
}
return result;
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
CarouselSlider(
height: 200.0,
initialPage: 0,
enlargeCenterPage: true,
// autoPlay: true,
enableInfiniteScroll: true,
autoPlayInterval: Duration(seconds: 4),
autoPlayAnimationDuration: Duration(milliseconds: 2000),
pauseAutoPlayOnTouch: Duration(seconds: 6),
onPageChanged: (index) {
setState(() {
_currentIndex = index;
});
},
items: imgList
.map((imgUrl) => Builder(builder: (BuildContext context) {
return Container(
width: double.infinity,
margin:
EdgeInsets.symmetric(horizontal: 5, vertical: 10),
decoration: BoxDecoration(
color: Colors.grey,
),
child: Image.network(imgUrl, fit: BoxFit.cover),
);
}))
.toList(),
),
SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: map<Widget>(imgList, (index, url) {
return Container(
width: 10,
height: 10,
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 2),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _currentIndex == index ? Colors.blue : Colors.grey),
);
}),
),
],
);
}
}
>>>>> ContentList class <<<<
class ContentList extends StatefulWidget {
@override
_ContentListState createState() => _ContentListState();
}
class _ContentListState extends State<ContentList> {
ScrollController _scrollController = ScrollController();
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Provider.of<DefaultContentProvider>(context, listen: false)
.fetchAndSetItems(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else {
if (snapshot.error != null) {
print(snapshot.error);
return Center(
child: Text('An error occured'),
);
} else {
return Consumer<DefaultContentProvider>(
builder: (context, contentData, child) => ListView.builder(
shrinkWrap: true,
controller: _scrollController,
itemCount: contentData.lazyItem.length + 1,
itemBuilder: (context, index) {
if (index < contentData.lazyItem.length) {
return CardItem(
id: contentData.lazyItem[index].id,
title: contentData.lazyItem[index].title,
imageUrl: contentData.lazyItem[index].imageUrl,
contentLength: contentData.items.length,
);
} else if (index < contentData.items.length) {
// return _buildProgressIndicator();
return Padding(
padding: EdgeInsets.symmetric(vertical: 32),
child: Center(
child: Text('Loading more content'),
),
);
} else {
return Padding(
padding: EdgeInsets.symmetric(vertical: 32),
child: Center(
child: Text('No more content to display'),
),
);
}
},
),
);
}
}
},
);
}
}
>>>>>> ProviderClass<<<<<<
class DefaultContentProvider extends ChangeNotifier {
List _items = [];
List<CardItem> lazyItem = [];
int lazyItemIndex = 0;
List<CardItem> get items {
return [..._items];
}
List<CardItem> fetchTenItems() {
if (lazyItemIndex >= items.length - 1) return [];
var i;
for (i = 0; i < 10; i++) {
lazyItem.add(items[lazyItemIndex + i]);
}
lazyItemIndex += i;
return lazyItem;
}
void clearAllData() {
_items = [];
lazyItem = [];
lazyItemIndex = 0;
}
Future<void> fetchAndSetItems() async {
var url = 'https://jsonplaceholder.typicode.com/posts';
final response = await http.get(url);
final extractedData = await json.decode(response.body) as List<dynamic>;
if (extractedData == null) {
return;
}
final List<CardItem> responseData = [];
extractedData.forEach((objectResponse) {
responseData.add(
CardItem(
id: objectResponse['id'],
title: objectResponse['title'],
imageUrl:
'https://images.pexels.com/photos/3690052/pexels-photo-3690052.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
),
);
});
_items = responseData;
fetchTenItems();
notifyListeners();
}
}
将 global.h 更改为:
/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;